Java基础-浙大翁恺老师-第二章笔记

第二章

2.1比较

2.1.1 自动售票机

  • 返回金额可能产生负数

      public class Ticket {
    
      public static void main(String[] args) {
      	// TODO Auto-generated method stub
      //初始化
      	Scanner in = new Scanner(System.in);
      //		读入投币金额
      	System.out.print("请投币:");
      	int amount = in.nextInt();
      //		打印车票
      	System.out.println("*****************");
      	System.out.println("小鱼干城际铁路专线");
      	System.out.println("  无指定座位票        ");
      	System.out.println("    票价10元            ");
      	System.out.println("*****************");
      //		计算打印并找零
      	System.out.println("找零:"+(amount-10));
      
      }
    
      }
    
  • 关于注释问题
    注释按键 Ctrl+/ 或者/**/ (行内注释)
    int ak=47/*36*/,y=9

2.1.2 关系运算

  • 输出是否大于10

      	int amount = in.nextInt();
      	System.out.println(amount);
      	System.out.println(amount>=10);
    

    输出 为true or false

  • 关系运算

    运算符 意义
    = = 相等
    != 不相等

    其余与常用习惯相同
    注意:其中有两个字符的运算符:==、>=和<=的两个字符必须紧紧连在一起,中间不能插入空格。

  • 关系运算中的优先级
    1)赋值<关系运算符<算数
    2)判断是否相等的 = =与!= 的优先级比其他的低
    3)连续运算从左到右进行

  • 优先级举例
    5 > 3 = = 6 > 4
    先计算5>3和6>4然后计算是否相等 结果为true
    6 > 5 > 4
    在Java里面是错误的 相当于true>4无法判断
    a = = b = = true
    如果a==b则返回true
    a = = b == 6
    错误,无法比较
    a = = b > false
    无法比较b>false 即使b为false or true 也无法比较
    (a = = b) > false
    错误使用

  • int vs double?

      int a = 5;  
      double b = 5.0;  
      System.out.println(a==b);   
    

    结果为true,但是会有提示

      double a = 1.0;
      double b = 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
      System.out.println(a==b);
    

    结果为false a为1.0而b为0.9999999999

      Math.abs(f1 - f2) < 0.00001
    

    浮点数是有误差的,需要如上进行绝对值的差的判断

2.2 判断语句

2.2.1 判断

  • 判断车票

      //初始化
      		Scanner in = new Scanner(System.in);
      //		读入投币金额
      		System.out.print("请投币:");
      		int amount = in.nextInt();
      		System.out.println(amount);
      		System.out.println(amount>=10);
      		if (amount>=10)
      		{
      	//		打印车票
      			System.out.println("*****************");
      			System.out.println("小鱼干城际铁路专线");
      			System.out.println("  无指定座位票        ");
      			System.out.println("    票价10元            ");
      			System.out.println("*****************");
      	//		计算打印并找零
      			System.out.println("找零:"+(amount-10));
      		}
    
  • 判断年龄

      		final int MINOR= 35;
      	System.out.print("请输入你的年龄");
      		Scanner in = new Scanner(System.in);
              int age = in.nextInt();
      		System.out.print("你的年龄是:"+age);
       if (age<=MINOR)
       
      	 System.out.println("年轻是美好的");
       else
       {
      	 System.out.println("年龄决定了你的精神世界,好好珍惜吧");
       }
    

2.2.2 流程图

学会画流程图,可以整理思路

Created with Raphaël 2.2.0 开始 执行 判断? 结束 yes no

2.2.3 嵌套和级联的if

  • else 的匹配
    else总是和最近的那个if匹配

      if ( code == READY ) {
        if ( count <20 )
         System.out.println("一切正常\n");
      } else
         System.out.println("继续等待n");
    
  • 级联

      if ( exp1 )
      st1;
      else if ( exp2 )
      st2;
      else
      st3;
    

    可以写作这种格式,为了不混淆最好都使用大括号

  • 单一出口代码更好
    较好的示例:

      int f;
      if ( x < 0 ) {
      f = -1;
      } else if ( x == 0 ){
      f = 0;
      } else {
      f = 2 * x;
      }
      System.out.println(f);
    

    较差的示例:

      if ( x < 0 ) {
      System.out.println(-1);
      } else if ( x == 0 ) {
      System.out.println(0);
      } else {
      System.out.println(2 * x);
      }
    

2.2.4 if else 常见的错误

  • 一定要加{}

  • if 后面不可以有“;”
    如果有的话,及时不符合也会执行if 后面的语句
    加上分号意味着:我什么都不做

  • ==混淆=

  • 大括号的语句缩进一个tab -自动分隔

  • 常用格式

     if (x<0)
     { 
     	f=-1;
     }
     else if (x==0)
     {
     	f=0;
     }
     else
     {
     	f=2*x;
     }
    

    为了删除/注释方便

2.3 多路分支

2.3.1 switch(int)-case

	switch ( type ) {
	case 1: 
	System.out.println("你好");
	break;
	case 2:
	System.out.println("早上好");
	break;
	case 3:
	System.out.println("晚上好哦");
	break;
	case 4:
	System.out.println("再见");
	break;
	default:
	System.out.println("啊???");
	}
  • switch(控制表达式) { }
    控制表达式只能是整数型(int)
  • case 常量 :
    常量也可以是常数也可以是常数表达式
    case后面是冒号:
  • break;
    执行case后面的语句 直到遇到break; 跳出分支
  • default:
    如果所有的全部不匹配,就执行default后的语句;如果没有就什么都不做

2.3.2 break

  • 如果执行过程中没有遇到break呢?
    计算switch后面的控制表达式以后,程序会跳到相应的case 但是如果这个case内部没有break,那么在执行完语句后,就会顺序执行到下面的case,直到遇到break或者switch结束
  • debug
    1,双击行数字可以出现小蓝点 设置断点
    2,小瓢虫进行debug
    3,step over 逐步运行
    4,右上角小瓢虫切换到debug界面

2.4 作业以及疑问

2.4.1 作业

  1. 时间换算

     Scanner in=new Scanner(System.in);
     int BJT = in.nextInt();
     int UTC;
     final int timedelay=800;
     if (BJT<=2359)
     {
     	if (BJT<=759)
     	{
     		UTC=(2400-timedelay)+BJT;
     	}	
     	else
     		UTC=BJT-timedelay;
     	System.out.print(UTC);
     }
    
  2. 信号报告

     Scanner in =new Scanner(System.in);
     int RS= in.nextInt();
     int R;
     int S;
     R=RS/10;
     S=RS-R*10;
     switch(S)
     {
     case 1:
     	System.out.print("Faint signals, barely perceptible, ");
     break;
     case 2:
     	System.out.print("Very weak signals, ");
     	break;
     case 3:
     	System.out.print("Weak signals, ");
     	break;
     case 4:
     	System.out.print("Fair signals, ");
     	break;
     case 5:
     	System.out.print("Fairly good signals, ");
     	break;
     case 6:
     	System.out.print("Good signals, ");
     	break;
     case 7:
     	System.out.print("Moderately strong signals, ");
     	break;
     case 8:
     	System.out.print("Strong signals, ");
     	break;
     case 9:
     	System.out.print("Extremely strong signals, ");
     	break;
     }
     switch(R)
     {
     case 1:
     	System.out.print("unreadable.");
     	break;
     case 2:
     	System.out.print("barely readable, occasional words distinguishable.");
     	break;
     case 3:
     	System.out.print("readable with considerable difficulty.");
     	break;
     case 4:
     	System.out.print("readable with practically no difficulty.");
     	break;
     case 5:
     	System.out.print("perfectly readable.");
     	break;
     }
    

2.4.2 疑问与思考

  • println 与print 的区别
    println和print基本没什么差别,就是最后会换行

  • Scanner in =new Scanner(System.in); 会出现警告
    Resource leak: ‘in’ is never closed
    可以在最后加入:

     in.close();//释放
    

    或者

     xxx.close();//释放
    

    xxx为定义的变量
    原因:
    数据输入扫描仪(Scanner),从而获得了配置内存,但是结束时却没有关闭或释放该内存,而出现警告。因此mian函数的结束时用XXX.close();结束数据流,释放内存。
    答案来自这里CSDN王胜飞blog

你可能感兴趣的:(Java基础-浙大翁恺老师-第二章笔记)