为什么使用多重循环
有时单独一个循环不能满足我们的要求,我们就要使用多重循环,这不废话吗。
多重循环的使用:
一般我们使用多重循环都是双重for循环, 语法:
for(循环条件){
循环操作1;
for(循环条件2){
循环操作2;}
}
相信各位都已经看出端倪了,这个双重for循环是不是就是看条件找一个外循环,再分出个内循环就行了。
我们先根据这个最基本的特点写一个形象点的练习:
用双重循环展示时针和分针的关系。
这个够明显吧,时针走一步,分针走一圈,直接看代码:
public class Test02 {
public static void main(String[] args) {
//外层走一次,内层走一周
for (int i=1; i<=12; i++){
for (int j=1; j<=60;j++){
System.out.println("现在是:"+i+"时,:"+j+"分");
}
System.out.println("---------------");
}
}
}
那我们进一步来熟悉多重循环,我们来用星星*打一个平行四边形,我们来分析一波,看看这个图就明白了
我们想办法每一层先打出#,#的数量是总层数-层数,我们使用for循环来实现,层数用i来代替,每一层的#用k来表示,k的初始值我们设置为5,k>层数i,就打印一个#,用k--每执行一次就减一,continue重复执行,直到不符合循环条件(k>i)时一层的#是不是就打好了。
for (int i=1; i<=5; i++){
for (int k=5; k>i; k--){
System.out.print("#");
continue;
} 是不是就是这么个东西?
单独打印一下看一下
下面是不是只要每一层打出固定的星星*就行了,看来完整的代码,跟着走一遍
public class Test01 {
public static void main(String[] args) {
for (int i=1; i<=5; i++){
for (int k=5; k>i; k--){
System.out.print("#");
continue;
}
for (int j=1; j<=5; j++){
//这里print是不换行的意思
System.out.print("*");
continue;
}
//打个空白换行
System.out.println();
}
}
}
我们再把#换成空格就可以了:
是不是有点懵了,你把这想成洋葱一样一层一层去进行就行。
趁热打铁,我们再打个三角形🔺
还是一样的道理,#的规则没动,变得是*,找规律第一层1,第二层3…好,看出来了,每一层*的个数是层数*2–1
for (int j=1; j<=i*2-1; j++){
//这里print是不换行的意思
System.out.print("*");
continue;
} 其他地方不动,这一部分改一下循环条件即可。把#换成空格:
这些比较经典的例子一定理解好记好,你去面试人家可能即兴让你打个三角形啥的。
多重循环后期开发中一般不会超过三层,不然那太麻烦了对不对,也不方便维护。
Break&continue
break语句
特点:
1.用于终止某个循环,使程序跳出循环块。
2.break后面的语句不再执行。
3.不仅可在循环中,也可在其他语句中。
练习一下:一次输入三名同学成绩,如果成绩输入为负数,强制停止输入,给予提醒。
不废话,看代码分析。
public class Test01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double score=0;
//用一个for循环一次输入同学成绩
for (int i=1; i<=3; i++){
System.out.println("请输入第:"+i+"名同学成绩");
//前面声明了全局变量,此处直接接收即可。
score = input.nextDouble();
//判断是否为负数
if (score<0){
System.out.println("给我好好输!");
break;
}
System.out.println("第"+i+"名同学成绩是"+score+"分");
}
}
}
我们看看我们直接输入负数会怎么样
它弹出这个提示语句之后就直接把程序终止掉了,如果我们不加这个break它就会再一次让我们输第二名第三名的成绩。
再通过一个练习加深一下,1~10内整数整数相加,累加值大于21后终止。
非常简单:
public class Test01 {
public static void main(String[] args) {
int sum=0;
for (int i=1; i<=10; i++){
sum+=i;
if (sum>=21){
System.out.println("此时的sum值为:"+sum);
break;
}
}
}
}
break语句可以针对你不知道循环次数时,设置一个条件直接让他跳出就可以。
比如要找到4,是不是运行到4我们就要终止。
就像上面我们假装不知道什么时候执行到4,虽然看起来很蠢到我们这是假装,也就是我们不知道循环执行几次,我们不设置循环条件就行,直接空出来(如下)
这也就是所谓的死循环,这个时候我们是不是要在程序运行到我们想要的地方break终止就好了。
for (int i=1;; i++){
if (i==4){
break;
}
continue语句
刚刚已经开了个头了,大致知道这个的作用是什么了,就是语句执行到它的时候,会重新跳回循环开头,再重新执行,不会在执行剩余的语句,直到不满足循环条件为止。
很简单,举个简单的例子,我们打印一下1到5这些数字,但独独不打印4。
public class Test01 {
public static void main(String[] args) {
for (int i=1;i<=5; i++){
if (i==4){
continue;
}
System.out.println(i);
}
}
}
看结果他执行到4的时候,是不是直接跳回循环开头,执行剩下的循环直到不满足条件,4的时候下面的打印语句没有执行,就是这个意思。
程序调试
方法:
1.通过代码阅读或者加输出语句直接查找程序错误,也就是我们常用的sout打印语句,在关键地方可以看到程序运行的过程。
2.通过工具里的debug进行调试。
使用debug首先要打段点,就是这个程序从哪里开始你要找到,你认为错误出在那一段,在那一行前面单击出现红点就是打好了段点
一定要点行号那一块地方,不然打不上。然后右击图中地方就是debug
在页面右上角也有个小虫子形状的也是。
然后一行一行点着走就行了,可以一步步进行程序,看具体那一步执行那一块。