这几天比较忙,把这事儿耽误了,今天赶紧补上,上一篇我们留了三道作业题,别说是两道啊!我会桑心,因为有一道在文章里面,就是利用for循环来打印个99乘法表
直接上代码了
public class Nine { public static void main(String[] args) { for (int i = 1; i < 10; i++) { for (int j = 2; j < 10; j++) { if(i == 1 && j == 2){ System.out.println("1*1 = " + 1 + " "); } System.out.println(i + "*" + j + " = " + (i * j) + " "); } } } }
来看结果
由于太长,我没有把全部的都截图出来,就出来这么多;
在分析之前提个小问题,大家回去自己试试,如果没有
if(i == 1 && j == 2){ System.out.println("1*1 = " + 1 + " "); }
这段代码会如何?
如果 j 也从1 开始会如何?
这个就留给大家解决了,我们来稍微分析一下,首先就是打印的时候
System.out.println(i + "*" + j + " = " + (i * j) + " ")
在i * j之前我们先拼出了 i * j = 的字符串,仔细观察下,我们是怎么拼接的,直接用变量 + ""双引号里面的字符,这也是java中string类型数据,也就是字符串数据拼接的基本方法,大家可以自己尝试,这个并不陌生,
其他就没什么可说的,上一篇对于循环嵌套已经做过解释了;
来看第二题
利用while循环做100以内的加法,一直了三个变量
看代码
public class SumByWhile { public static void main(String[] args) { int i = 0; int index = 100; int sum = 0; while(i < index){ i++; sum += i; } System.out.println("sum = " + sum); } }
每次执行循环的时候,i ++ ,从0开始,然后是1,2,3,4,5...我们定义了一个sum变量,是相加之和,一开始是0,我们只要把每次i的值加到sum上,sum = sum + i;就是可以了,还记得 i ++的另一种形式么?
i = i + 1;套到这里,那就是sum+ =i;然后直接打印就ok了,来看看结果
来看第三题,打印出100以内是3的倍数,但是不是5 和9的倍数的数字
提示上一篇也说了,看一个数是不是另一个数的倍数怎么看? %这个符号是不是?这个符号是什么意思?
我直接上代码
public class while359 { public static void main(String[] args) { int i = 0; int index = 100; while(i < index){ if(i % 3 == 0){ if(i % 5 !=0 && i % 9 != 0){ System.out.println("100以内3的倍数,但不是5 和9的倍数 = " + i); } } i++; } } }
循环我们已经知道了,这段代码的核心就是两个if的判断,大家好好研究了
顺便来个问题,(i % 5 !=0 && i % 9 != 0)这里还可以怎么写?
来看结果
ok,习题已经讲完了,有问题可以留言!
来看看今天得内容
看标题就知道了,今天得内容是,继续,中断和返回
在说继续之前,我们来说说中断,这两个概念是相对的,
中断,主要的应用场景就是强行退出循环和分支语句;
使用的方法就是一个单词,break,不过别忘了在单词后面加个分号,这样break;这就是一行代码了
我们来看个例子:
public class WhileBreak { public static void main(String[] args) { int i = 1; while(i <= 10){ System.out.println("i = " + i); i++; if( i > 5){ break; } } } }
先来猜一猜结果,根据上文说的,break是用来强制退出循环或者分支语句,我们这里是循环,
break在if条件语句里面,也就是说,当if语句满足条件是才会break,那么i > 5的时候就是条件满足了,
就退出循环了,那么5以后的数字还会打印出来么?
来看看结果
怎么样,和我们猜想差不多吧,到了i =6的时候,发现i是但与5的,进入if条件语句的执行块,这个执行块的代码就是break,直接中断了循环,不会再继续下了;再来看两个变体
public class WhileBreakQueit { public static void main(String[] args) { int i = 1; while(i <= 10){ i++; System.out.println("i = " + i); if( i > 5){ System.out.println("退出!"); break; } } } }
这段运行的结果和上一段略有不同,多了一行退出,自己来试试,
来看下面这个对应的例子
ublic class WhileBreakQueit { public static void main(String[] args) { int i = 1; while(i <= 10){ i++; System.out.println("i = " + i); if( i > 5){ break; } if(i > 5){ System.out.println("退出"); } } } }
这个例子我们加了一句话,当i > 5的时候,打印退出,这个例子,大家试验下,看看结果是什么?这个退出两个字能打印出来么?
这个结果我就不截图了,因为答案就是没打印出来。原因呢,因为他的上面有个break;当i > 5的时候,先执行了break,中断了,下面这个条件语句虽然成立,但是没有执行;
由此可以,这个中断是直接中断退出,循环中在中断语句之后的代码不会被执行;
还有一点,我们发现中断语句都是和条件语句一起使用的,因为只有特定的条件我们才希望他中断,否则的话。。就没有循环了,进来直接就中断了!
接下来我们说说继续语句
继续语句和中断语句有些类似的地方,他也可以说是一种中断,但又不完全是中断,当我们使用continue的时候推出本次循环,注意是本次,既然他也是一种中断的话,那么中断之后循环体中的代码。。。什么后果我就不说了。
继续语句我们就用continue
来看个例子
public class ForContinue { public static void main(String[] args) { for (int i = 1; i < 10; i++) { if(i % 2 ==0 ){ continue; } System.out.println("i = " + i); } } }
这段代码,是说,当时2的倍数的时候continue,就是跳出本次循环从新开始下次循环,那么我们打出来的是哪些数字呢,掰掰手指头数数,我们来看结果
当当当。。。奇数,因为每次偶数的时候我们都是continue了,continue的时候直接从头开始,在continue之后的代码,我们都不管了,直接从头再来;这就是继续语句;
他和break有些类似,又有些不同;注意区分
之前提到过 switch case语句,如果记忆力好的同学应该记得每个case后面都有一个break,已保证执行完当前case之后,就会跳出分支语句;这里就不单独写例子了,大家可以回忆下。
接下来我们来说说返回语句;
返回语句就是在执行程序的过程中跳转到另外一个程序,一般返回语句用在子程序或者程序的方法中,注意,我们在使用return的时候可能是希望返回某个值,也可能不希望程序继续执行,所以才return,这就跟continue和break有一些类似,只是return可以不在循环或者分支中使用,来两个例子瞧瞧
public class ReturnMethod { public static void main(String[] args) { ReturnMethod rm = new ReturnMethod(); rm.setIntValue(4); rm.setIntValue(6); int returnValue = rm.getIntValue(6); System.out.println("returnValue = " + returnValue ); } public void setIntValue(int index){ System.out.println("--setIntValue--begin"); if(index > 5){ return; } System.out.println("--setIntValue--end;index = " + index); } public int getIntValue(int index){ return index * 10; } }
这个例子略微复杂,我们一步一步的看,首先new了一个ReturnMethod,为什么要new呢?因为我的main方法是static的,但是我们想在main方法中想调用的setIntValue和getIntValue不是static的,那么我们只能在main方法中构造出来ReturnMethod对象, 然后再使用这个对象的相应的方法,还有一种方式,不用new对象,也可以调用这两个方法,只是要对这两个方法做一些修改,怎么改就是今天得作业了。。。好好考虑下,static这个关键词
我们看setIntValue这个方法,传进去一个int型的参数,方法声明上这个void代表没有返回值,再看方法内部,第一句是打印出来这个方法开始了,第二部分是if条件语句,如果index大于5就用我们刚刚学的返回语句return;
最后一句是打印,这个方法结束了
第二个方法,方法声明上有个int,代表返回值是int类型的数据,方法中就一句话,return index *10也就是说,返回index的10倍;我们在main方法中接受了这个返回值,并打印了出来,如果我们没有接受这个返回。。也不用多解释了,给你东西你要,那么这个东西你就没有。。
在main方法中,我们调用了两次setIntValue方法,给了不同的参数,来猜猜打印出来的结果是什么?
来看结果
我们来分析一下,第一次调用setIntValue我们的参数是4,小于,没有执行返回语句,所以第一次的时候打印了开始,结束和index的值;第二次调用的时候,我们给的参数是6,比5大,那么会进入条件语句块,然后执行return,这个时候结束和index的值还会打印出来么?从结果看,没有打出来,原因就是刚才讲到了,返回之后后面的代码不会再执行了;那么不加if行不行呢?你可以动手试试,看看编译器同意不.....
执行了两次setIntValue之后,我们调用了getIntValue并且接受了返回值,打印出来,和我们猜想的应该没有太大的区别,就不多解释了
怎么样,这个return语句还是比较简洁的吧?
over,今天就到这里;记得今天有一道作业题哦!!!