在开发环境中,我们常会有许多具有规律性的重复指令需要计算机去操作。因此就需要使用到循环。
循环是由反复被执行的循环体语句和循环终止条件共同组成。
for 循环
for
语句属于前测试循环语句,它具有在执行循环前初始化变量和定义循环后要执行的代码的能力。
语法:
for(表达式1; 表达式2; 表达式3){
循环体;
}
for 循环分为3步:
- 初始化(initialize):确定循环的初始值,只在循环开始时执行一次
- 测试(test):检查循环条件,为 true 就进入循环体
递增(increment):完成后续操作返回上一步,再次检查循环条件
遇到 for 关键字,首先执行表达式 1
- 再判定表达式 2 是否为 true,为真进入下一步,为假退出循环
- 执行循环体语句
- 执行表达式3,然后回到 2 进行下一次是否循环的判断
while 循环
while
也是前测试语句。也就是说在循环体内的代码被执行前就会对出口条件求值。因此循环体内的代码就有可能永远不会被执行。
语法:
while(条件表达式){
循环语句块;
}
do while 循环
do while
语句是一种后测试循环语句,即在循环体执行后才会测试出口条件。换句话说先是执行一次循环体再进行条件的判断,如果成立就再次执行循环体,否则就退出。do while
至少会执行一次。
语法:
do{
循环语句块;
}while(条件表达式);
三种循环的比对
- for循环适用于明确知道循环的次数
- while循环适用于不知道循环的具体次数,只知道达到某个条件的时候循环结束
- do-while循环适用于不知道循环的具体次数但至少要执行一次,只知道达到某个条件的时候循环结束
打断循环
break
和 continue
关键字用于在循环中精确地控制代码的执行,break
用于立即跳出整个循环。continue
结束本次循环,循环没有跳出,进入下一次循环。
break
在循环结构中,用break语句跳出本层循环体,从而提前结束本层循环。
for (int i = 0; i < 10; i++) {
if (i == 3) {
break;
}
System.out.println(i); // 0 1 2
}
continue
continue是结束本次循环(即跳过本次循环中余下尚未执行的语句),接着再一次进行循环条件的判定。
for (int i = 0; i < 10; i++) {
if (i == 3) {
continue;
}
System.out.println(i); // 0 1 2 4 5 6 7 8 9
}
对比 break 和 continue
for (int i = 0; i < 5; i++) {
if (i == 3) {
break;
}
System.out.println(i); // 0 1 2
}
for (int i = 0; i < 5; i++) {
if (i == 3) {
countinue;
}
System.out.println(i); // 0 1 2 4
}
循环的嵌套
双重循环也就是循环内再套循环。每当外层循环执行1次,内层循环执行1圈。
语法:
外层循环{
内层循环{}
}
分析输出:
for (int i = 1; i <= 3; i++) {
System.out.println("i:" + i);
for (int j = 1; j <= 5; j++) {
System.out.println("j:" + j);
}
}
/*
i:1 j:12345
i:2 j:12345
...
*/
在嵌套循环中需要注意的点:
- 几重循环看的是循环嵌套的层级,而不是循环的个数;
- 在语法上循环嵌套的层次是可以无限的,但是在现实开发当中,最多达到三重循环;嵌套层次过多会导致程序流程控制力度下降,算法可读性降低;
- 嵌套循环的关键,在于搞清楚循环执行的顺序。外层循环执行1次,内层循环执行1圈;
内层循环可以访问外层循环的循环控制变量;
外层循环不能访问内层循环的循环控制变量; - 循环控制变量命名,最外层的用i,第二层用j,第三层用k,依次类推,这是“约定俗成”的规范; 同层循环可以使用同名的循环控制变量;
- break 和 continue,只能对本层循环起作用
等号与equals()
在进行数据量的比较时,只有基本数据类型才能使用 “ == ” 比较值是否相等。引用数据类型 String 要用字符串.equals(另一个字符串);
来进行比较。 ```java // 使用字符比较是相等 String str = “男”; char cha = ‘男’; System.out.println(str == “男”); // true System.out.println(cha == ‘男’); // true
// 如果是获取的输入 System.out.println(“请输入:”); String ipt = scan.next(); if (ipt == “男”) { System.out.println(“输入的是男”); } else{ System.out.println(“啥也不是”); // 无法进 if }
// 改为 equals() System.out.println(“请输入:”); String ipt = scan.next(); if (ipt.equals(“男”)) { System.out.println(“输入的是男”); // 可以被成功判断 } else { System.out.println(“啥也不是”); }
<a name="QgcMT"></a>
# GUI
Java 在 javax.swing 包自带了 GUI(graph user interface) 图形开发的 API,使用 `JOPtionPane` 类弹窗,可以替代 Scanner 接收用户信息。
- 消息框:`showMessageDialog()` 替代 System.out.printLn() `JOptionPane.showMessageDialog(null, "显示文字")`
- 输入框:替代 Scanner `JOptionPane.showInputDialog(null, "提示内容");`
- 确认框:`JOptionPane.showConfirmDialog(null,"确认的消息");` 返回值是 int 值,取消 2 否 1 确认 0
<br /><br />
<a name="IfDYl"></a>
# 字符串和基本数据类型之间的转换
1. 基本数据类型转字符串 -- 基本数据类型 + “”
1. 字符串转基本数据类型。首先保证字符串里的内容是一个正确的可以被转换的数据
```java
String str = "123";
// 字符串 -> int
int num = Integer.parseInt(str);
// 字符串 -> double
double weight = Double.parseDouble(str);