三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

JavaSE初学(2)

JavaSE初学(2)

第二章 If、While、For、Switch

一、Java 四大流程控制:if、while、for、switch

1. if-else 语句

if-else 是 Java 中最基础的条件控制语句,用于根据布尔表达式的结果执行不同的代码块。

if (boolean) { // 代码块 } else if (boolean) { // 代码块 } else if (boolean) { // 代码块 } else { // 代码块 }

注意事项:

  1. 括号里只能是 boolean 表达式,不能写数字(C 语言可以,Java 不行)
  2. 通过 Scanner 可以实现从控制台输入信息:
Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩:"); int score = scanner.nextInt();

若 IDEA 控制台不能输入数据,可添加 VM 参数:-Deditable.java.test.console=true

3. 超过三层的 if-else 逻辑语句可以使用卫语句优化:

public void findBoyfriend(Man man) { if(man.isUgly()){ System.out.println("换一个"); return; } if(man.isPoor()){ System.out.println("再换一个"); return; } if(man.isBad()){ System.out.println("nonono"); return; } System.out.println("Yes"); }

2. 三目运算符

语法:boolean ? 数1 : 数2

执行过程:计算 boolean 的值,若为 true 则结果为数1,若为 false 则结果为数2。

public void test() { int num1 = 13; int num2 = 5; int max = 0; if (num1 >= num2) { max = num1; } else { max = num2; } System.out.println(max); int max1 = num1 >= num2 ? num1 : num2; System.out.println(max1); }

3. + 号运算符

  1. 两边都是数字,则做加法运算
  2. 若一边为字符串,则做字符串拼接
public void test() { int age = 28; System.out.println("我的年龄是23岁"); System.out.println("我的年龄是" + age + "岁"); // 我的年龄是28岁 System.out.println(10 + 20 + "" + 30); // "3030" System.out.println("" + 10 + 20 + 30); // "102030" }

补充:

String str = ""; // 空字符串 char ch = ''; // 错误的,没有空字符 char ch = ' '; // 正确的,是空格字符

二、While、For 循环

1. while 循环

(1) while 结构

while 适用于循环次数不确定,但需要先判断条件再执行的场景。

while (条件) { // 条件为 true 时反复执行 }

示例:

public void test() { int i = 1; while (i <= 5) { System.out.println("HelloWorld"); i++; } }

注意:如果条件一开始就是 false,循环体一次都不会执行。

(2) do-while 结构
do { // 先执行一次 } while (条件); // 注意这里有分号

注意:无论条件是否成立,do-while 的循环体至少会执行一次,适用于需要先执行一次业务逻辑再判断是否继续的场景。

2. for 循环

for 最适合循环次数已知或需要遍历集合/数组的场景。

for(变量声明和赋值; 循环条件; 变量自加){ // 循环体 }

执行顺序:变量声明和赋值 → 判断循环条件 → 执行循环体 → 变量自加 → 返回再次判断循环条件进入下一次循环,直到条件为 false。

public void test() { for (int i = 1; i <= 5; i++) { System.out.println("HelloWorld"); } }

while、for 循环主要有两类题目:

(1) 累加思想(1+2+3+...+100)
// sum += i; sum = sum + i // sum -= i; sum = sum - i // sum *= i; sum = sum * i // sum /= i; sum = sum / i @Test public void test() { int sum = 0; for (int i = 1; i <= 100; i++) { System.out.println(i); sum += i; System.out.println("sum: " + sum); } System.out.println("sum: " + sum); }
(2) 统计思想,数一下符合条件的有多少个(计算1-100以内7的倍数的个数)
@Test public void test() { int count = 0; for (int i = 1; i <= 100; i++) { if (i % 7 == 0) { System.out.println(i); count++; } } System.out.println("count: " + count); }

3. continue、break

continue:跳出本次循环,继续下一次循环

break:跳出离它最近的那层循环

@Test public void test01() { for (int i = 1; i <= 5; i++) { if (i == 3) { continue; } System.out.println(i); } } @Test public void test02() { for (int i = 1; i <= 5; i++) { if (i == 3) { break; } System.out.println(i); } } @Test public void test03() { // i,j,k for (int i = 1; i <= 5; i++) { System.out.println("i: " + i); for (int j = 1; j <= 5; j++) { if (j == 3) { break; } System.out.println("j: " + j); } } }

注意:

  1. 无限循环:有结束条件,但是条件无法满足
  2. 死循环:没有结束条件的循环
do{ // 循环体 } while(true); for (;;){ // 循环体 }

4. 双重 for 循环

  1. 外层循环控制行数,数一下有几行就能确定外层循环
  2. 内层循环控制列数,这一行打印多少个,到底要打印多少个要找出和当前行之间的一个关系
@Test public void test04() { for (int i = 1; i <= 4; i++) { System.out.print("*"); } System.out.println(); // **** for (int i = 1; i &lt;= 4; i++) { System.out.println("*"); } // * // * // * // * } @Test public void test05() { for (int i = 1; i <= 3; i++) { // i=1: 代表打印第一行 // i=2: 代表打印第二行 // i=3: 代表打印第三行 for (int j = 1; j <= 4; j++) { // j代表这一行打印多少个 System.out.print("*"); } // 打印完一行之后需要换行 System.out.println(); } } @Test public void test06() { // i=1 j=1 // i=2 j=2 // i=3 j=3 for (int i = 1; i <= 5; i++) { for (int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); } // * // ** // *** // **** // ***** } @Test public void test07() { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { // 很多时候先用一个假的数据先把框架搭建起来,先把流程走完,再把假的变成真的 // System.out.println("27=14\t"); System.out.print(j + "" + i + "=" + (i * j) + "\t"); } System.out.println(); } // 结果为九九乘法表 }

三、Switch 语句

switch 可以接受的值:byte、short、int(整数类型),charStringEnum(枚举)不支持 long

switch(2) { case 1: // 代码 break; case 2: // 代码 break; // ... default: // 代码 break; }

示例:

int month = 12; switch(month) { case 1: System.out.println("1月"); break; case 2: System.out.println("2月"); break; case 3: System.out.println("3月"); break; default: System.out.println("没有这个月"); } // 输出:没有这个月

// switch 匹配某一个变量的值,如果匹配到某一个 case 项,就从这一项开始执行,
// 如果所有的 case 都没有匹配,就执行 default
// 直到遇到 break 为止,或者代码块结束

@Test public void test00() { int num = 12; if (num == 1) { System.out.println("1"); } else if (num == 2) { System.out.println("2"); } else if (num == 3) { System.out.println("3"); } else { System.out.println("else"); } switch (num) { case 1: System.out.println("1"); break; case 2: System.out.println("2"); break; case 3: System.out.println("3"); break; default: System.out.println("default"); break; } }

练习1:输入月份判断天数

1、3、5、7、8、10、12 -------- 31天
4、6、9、11 -------------------- 30天
2 ---------------------------------- 28/29天

@Test public void test1() { Scanner scanner = new Scanner(System.in); System.out.println("请输入月份:"); int month = scanner.nextInt(); switch (month) { case 1: System.out.println("31天"); break; case 3: System.out.println("31天"); break; case 4: System.out.println("30天"); break; case 5: System.out.println("31天"); break; case 2: System.out.println("请输入年份:"); int year = scanner.nextInt(); // 判断闰年 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { System.out.println("29天"); } else { System.out.println("28天"); } break; } } @Test public void test2() { Scanner scanner = new Scanner(System.in); System.out.println("请输入月份:"); int month = scanner.nextInt(); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println("31天"); break; case 4: case 6: case 9: case 11: System.out.println("30天"); break; case 2: System.out.println("请输入年份:"); int year = scanner.nextInt(); // 判断闰年 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { System.out.println("29天"); } else { System.out.println("28天"); } break; default: System.out.println("default"); break; } }

练习2:猜数字游戏

@Test // 猜数字 public void test01() { Scanner scanner = new Scanner(System.in); Random rand = new Random(); // 随机生成1~1000的数字 int target = rand.nextInt(1000) + 1; while (true) { System.out.println("猜吧!"); int input = scanner.nextInt(); // 输入0退出程序 if (input == 0) { System.out.println("程序退出"); break; } if (input &amp;gt; target) { System.out.println("太大了"); } else if (input &amp;lt; target) { System.out.println("太小了"); } else { System.out.println("恭喜你,猜对了"); break; } } scanner.close(); }
← 返回列表