Java学习第二周总结

本周学习了选择结构和循环结构

目录

首先是if选择结构:

1.基本的if选择结构:

 2.复杂的if选择结构

双分支if-else选择结构

多重if分支选择结构

 嵌套的if选择结构

String类型数据的判断

Math.Random的使用

switch选择结构

case穿透现象的使用

while循环

do-while循环

for循环

for循环中的常见问题

 三种循环的区别

多重循环:一个循环体内有包含另一个完整的循环结构

 break语句

continue语句

break与continue的对比

程序调试

总结


http://t.csdn.cn/Kk6d2http://t.csdn.cn/Kk6d2

首先是if选择结构:

1.基本的if选择结构:

 语法结构为:

        if(条件){
                //代码块

        }

执行规律:

如果条件为true,执行{}里的代码块,执行完代码块之后继续执行{}后面的代码

如果条件为false,则跳过if选择结构,执行{}后面的代码

注意:条件不管是多简单还是多复杂,其运行结果都是布尔值,true或false

 2.复杂的if选择结构

首先要结合运算符的优先级编写条件:

最高的优先级:( )

最低的优先级:=

优先级:!> 算术运算符 > 关系运算符 > && > ||

复杂条件使用括号提高可读性

双分支if-else选择结构

语法结构:

if ( 条件 ) { 
        //代码块1  
 }else { 
       //代码块2 
}

执行规律:如果条件为true,执行代码块1,执行完代码块1后,结束整个if-else结构,继续往后执行if-else结构后面的代码

如果条件为false,执行代码块2,执行代码块2,执行完代码块2后,结束整个if-else结构,继续往后执行if-else结构后面的代码

多重if分支选择结构

语法结构:

 if ( 条件1) { 
     //代码块1  
 }
 else if (条件2) { 
     //代码块2 
 }
 else { 
     //代码块3 
 }

执行规律:

判断条件1,若条件1为true,则执行代码块1,执行完代码块1,结束整个if-elsei-if结构,执行if-else-if后面的代码

如果条件1为false,则继续往下判断条件2,如果条件2为true,则执行代码块2,执行完代码块2,结束整个if-else-if结构,执行if-else-if后面的代码

如果条件2为false,则继续往下判断条件3,如果条件3为true,则执行代码块3,执行完代码块3,结束整个if-else-if结构,执行if-else-if后面的代码

…………………………

所有条件都不满足执行else中的代码块n

注意:

(1)所有的条件都为布尔值

(2)else if可以有很多个

(3)else是可以省略不写的,当所有的条件都不满足,并且没有else是会直接结束整个if-else-if

多重if选择结构里的条件不能随意排列,要将要求严格的排在前面,如果要改还需要加上其他的闲置条件达到目的!

 http://t.csdn.cn/duuBghttp://t.csdn.cn/duuBg

 嵌套的if选择结构

语法结构:

if(条件1) {
      if(条件2) {
              代码块1
      } else {
              代码块2
      }
} else {
      代码块3
}

执行规律:嵌套if选择结构,在一个if选择结构中包含另一个完整的if选择结构

执行条件:根据条件是否成立决定执行对应的代码

String类型数据的判断

Scanner类中有能够获取String类型数据的方法,使用的是equals来对其进行比较

比如:Scanner sc = new Scanner(System.in);

String str = sc.next();

str.equals("好");


Math.Random的使用

随机获取一个[num1,num2)之间的int类型的整数(num2>num1)

int num=(int)(Math.random()*(num2-num1)+num1);

        //Math.Random():随机产生一个大于等于0.0,小于1.0之间的double类型的数据
		double num1 = Math.random();
		System.out.println(num1);
		
		//Math.random()*10:随机产生一个大于等于0.0,小于10.0之间的double类型的数据
		double num2=Math.random()*10;
		System.out.println(num2);
		
		//(int)(Math.random()*10):随机产生一个大于等0,小于10之间的int类型数据
		int num3=(int)(Math.random()*10);
		System.out.println(num3);
		
		//随机产生一个大于等于19,小于51之间的随机数
		int num4=(int)(Math.random()*32+19);
		System.out.println(num4);

switch选择结构

执行规律:根据表达式的值去匹配case后面的常量值,匹配上了就执行对应的语句,执行完对应语句后,执行break,结束整个switch结构,继续往下执行switch选择结构之后的代码。

如果表达式的值与所用的常量值不匹配,就执行default里面的语句,执行完之后执行break退出整个switch选择结构。

语法结构:

switch(表达式){
     case 常量1:
         //语句1;
         break;
     case 常量2:
         //语句2;
         break;
      case 常量3:
         //语句3;
         break;
    ……………………
     default:
        //语句n;
         break;
      }

注意事项:

1.表达式的值可以是 int、short、byte、char、枚举类型、String(JDK1.7及以后支持)

2.case后面的常量值不能相同

3.default语句可以省略不写,如果写上表示表达式的值与所用常量值不匹配,就执行default里的语句。default语句可以写在任意位置,一般写在Switch的末尾位置

4.switch选择结构只能处理等值判断的情况

5.break的作用是结束整个switch选择结构,如果缺少,代码会继续向下执行下一个case里的语句,这种现象成为“case穿透”现象

case穿透现象的使用

        Scanner sc = new Scanner(System.in);
		int month = sc.nextInt();
		switch (month) {
		case 2:
		case 3:
		case 4: 
			System.out.println("属于春天");
			break;
		case 5:
		case 6:
		case 7: 
			System.out.println("属于夏天");
			break;
		case 8:
		case 9:
		case 10: 
			System.out.println("属于秋天");
			break;
		case 11:
		case 12:
		case 1: 
			System.out.println("属于冬天");
			break;
		default:
			System.out.println("输入错误");
		}

这样写直接省了16行代码!


 http://t.csdn.cn/3yHLXhttp://t.csdn.cn/3yHLX

while循环

语法结构:
         初始值;
                 while(循环条件){
                         //循环操作代码
                 迭代部分
                } 

执行规律:

(1).首先执行1次初始值代码  

(2).判断循环条件,如果循环条件为true,就执行{}里面的循环操作代码和迭代部分的代码, 迭代完之后,继续返回判断循环条件,根据循环条件的结果决定是否继续执行循环操作

如果循环条件为false,则结束整个while循环结构,继续往下执行while循环结构之后的代码

注意:

(1).初始值代码只执行一次

(2).循环条件不管写的多么简单或者多么复杂,结果都只能是布尔值,要么为true要么为false

(3).迭代部分的作用是改变初始值,让循环条件再某一时刻不满足,从而结束整个while循环结构

(4).while循环是先判断循环条件,再根据循环条件的结果决定是否执行循环,如果第一次就不满足条件,循环操作时不会执行的。

do-while循环

语法结构

        初始值1;
        do{
            循环操作
            迭代
        }while(循环条件);

执行规律:

1.首先执行一次初始值代码

2.进入{}里执行一次循环操作和迭代部分,执行完之后进行条件判断,如果条件为true,返回{}里执行循环操作和迭代部分,如果条件为false,则结束整个do-while循环结构,继续往下执行do-while循环结构后面的代码

注意:

1.初始值只执行一次

2.循环条件不管写的多么简单还是复杂,都只能时布尔值,要么为true,要么为false

3.do-while循环是先执行一次循环操作,再判断循环条件,因此,如果第一次判断循环条件就不满足,循环操作也会执行一次(do-while循环里的循环操作至少会执行一次)

http://t.csdn.cn/Ou4h0http://t.csdn.cn/Ou4h0

for循环

for循环:

语法结构:

for(初始值;循环条件;迭代部分){
           循环操作

}

执行规律:

(1).首先执行1次初始值代码

(2.)判断 循环条件是否成立,如果循环条件为true,则执行{}里的循环操作代码,执行循环操作后,进行迭代,迭代完再进行循环条件判断,根据循环条件的结构决定是否继续执行循环操作

注意:

(1).初始值只执行1次

(2).循环条件只能是布尔值,要么为true,要么为false

(3).如果第一次判断循环条件就不满足,那么循环操作一次都不会执行。

for循环中的常见问题

 问题1:for循环中缺少初始值,编译不能通过,初始值可以写在for循环外面,也可以写在for循环()内
         int i =1;
         for(;i<=10;i++){
         System.out.println(i);
         }

 问题2:for循环缺少循环条件,会进入死循环
         for(int i=0;;i++){
         System.out.println("这是 "+i);
         }

问题3:for循环缺少迭代部分,会进入死循环,可以在{}里添加迭代代码,也可以在()最后位置添加迭代代码
         for (int i = 0; i < 10;) {
         System.out.println("这是 " + i);
         }

问题4:for循环缺少初始值、循环条件、迭代,会进入死循环
        for(;;){
             System.out.println("这是测试");
        }

需要多次重复执行一个或多个任务的问题考虑使用循环来解决

无论哪一种循环结构,都有4个必不可少的部分:初始部分、循环条件、循环体、更新循环变量

 三种循环的区别

(1). 语法不同

(2).执行顺序

while 循环:先判断,再执行

do-while循环:先执行,再判断

for循环:先判断,再执行

(3).适用情况

循环次数确定的情况,通常选用for循环

循环次数不确定的情况,通常选用while或do-while循环


http://t.csdn.cn/Ou4h0http://t.csdn.cn/Ou4h0

多重循环:
一个循环体内有包含另一个完整的循环结构

执行规律:

(1)外层循环控制行,内层循环控制列

(2)外层循环执行一次,内层循环执行了一遍

结构:

while(循环条件1){
     //循环操作1
     while(循环条件2){
          //循环操作2
     }
}

-----------------------

do{
    //循环操作1
    do{
        //循环操作2
    }while(循环条件2);
}while(循环条件1);

-----------------------

for(循环条件1){
     //循环操作1
     for(循环条件2){
          //循环操作2
     }
}

------------------------

while(循环条件1){
      //循环操作1
      for(循环条件2){
               //循环操作2
      }
}

注意
各循环可互相嵌套
一般不超过三层
外层循环变量变化一次,内层循环变量要变化一遍

 break语句

作用场景:switch选择结构和循环结构中

作用:

(1).在switch选择结构中遇到break,则结束整个switch选择结构,执行switch选择结构后面的代码

(2).在循环结构中遇到break,则结束整个循环结构后续所有操作,执行循环结构后面的代码

语法结构:

while(……){
…………
…………
break;
…………
…………
}

注意:break一般结合if选择语句一起使用

continue语句

作用场景:只能作用在循环结构中

作用:结束当前(本次)循环后续操作,继续执行下一次循环操作

语法结构:

while(……){
…………
…………
continue;
…………
…………
}

注意:continue一般结合if语句一起使用

break与continue的对比:

使用场合:break常用于switch结构和循环结构中;continue一般用于循环结构中

作用:break语句终止某个循环,程序跳转到循环块外的下一条语句;continue跳出本次循环,进入下一次循环

break和continue在双重循环中的使用:

break在双重循环中的使用,内层循环中的break结束的是内层循环,如果要结束外层训话你,需要使用标记来表明结束哪个循环

程序调试

通过代码阅读或者加输出语句查找程序错误

当程序结构越来越复杂时,需要专门的技术来发现和定位错误,就是"程序调试":

设置断点---->单步运行----->观察变量


总结:

和我一起学习的还有很多同学,其中很多很多人都比我优秀,我之前做了一个题目,用循环将十进制数改写为二进制,八进制数,十六进制数。我一开始使用的是累加的方法,才能实现将数据到过来输出,做法很繁杂。后来我在网上看到了一个大神,用的数组的方法,结构清晰,方法也很巧妙。后来我发现居然是我们班的同学,我想着哪来的大佬跑这里来炸鱼塘,不过我自身还需要努力训练自己的思维,争取能像我们班那些学的好的同学靠齐。

这是我写的:

        Scanner sc=new Scanner(System.in);
		System.out.println("请输入一个十进制数");
		int num=sc.nextInt();
		//二进制
		int sum=0;
		for(int i=1;i<=99;i++){
			int mod=num%2;
			num/=2;
			sum+=((mod+1)*(int)(Math.pow(10, i-1)))-((int)(Math.pow(10,i-1)));
		}
		System.out.println("转换为二进制是:"+sum);

结构不清晰,运算复杂

这是我们班某个大佬写的:

        Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个十进制数");
		int num = sc.nextInt();
		// 二进制
		int i;
		int j;
		int k;
		int[] arr=new int[999];
		for(i=1;num>0;i++){
			arr[i]=num%2;
			num/=2;
		}
		System.out.print("输出二进制为:");
		for(int a=i-1;a>0;a--){
			System.out.print(+arr[a]);
		}
		
		System.out.println();
		
		System.out.println("请输入一个十进制数");
		int num_8 = sc.nextInt();
		for(j=1;num_8>0;j++){
			arr[j]=num_8%8;
			num_8/=8;
		}
		System.out.print("输出八进制为:");
		for(int b=j-1;b>0;b--){
			System.out.print(+arr[b]);
		}
		
		System.out.println();
		
		System.out.println("请输入一个十进制数");
		int num_16 = sc.nextInt();
		for(k=1;num_16>0;k++){
			arr[k]=num_16%16;
			num_16/=16;
		}
		System.out.print("输出十六进制为:");
		a:for(int c=k-1;c>0;c--){
			switch(arr[c]){
			case 10:
				System.out.print("A");
				continue a;
			case 12:
				System.out.print("B");
				continue a;
			case 13:
				System.out.print("C");
				continue a;
			case 14:
				System.out.print("D");
				continue a;
			case 15:
				System.out.print("E");
				continue a;
			}
			System.out.print(+arr[c]);
		}

说好听点我这叫进步空间大,不过还是要加油啦

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放在糖果旁的是我很想回忆的甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值