基本上与C语言和C++的语法相同,先判断后执行。
while(循环条件) // 循环条件只能为boolean类型,这里与C语言和C++中不同 { 循环操作语句; }
1.2.1 使用循环计算1-100的累加和
package com.company; import java.util.Scanner; public class Main{ public static void main(String[] args){ int sum=0; int i=1; while(i<=100){ sum+=i; i++; } System.out.printf("%d\n",sum); } } // 结果:5050
1.2.2 计算输入整型数字中每位数字之和
package com.company; import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int num = input.nextInt(); int sum=0; // 存放各位之和 while (num>0) // num!=0 { sum+=num%10; num/=10; } System.out.printf("%d\n",sum); } } // 输入:123 // 输出:6
注意:在Java中的while循环的循环条件只能是boolean类型。
// 比如例子中的 while (num>0){ sum+=num%10; num/=10; } // 在C语言和C++中可以写为 while (num){ sum+=num%10; num/=10; }
1.2.3 使用循环实现三次密码输入错误退出系统
package com.company; import java.util.Scanner; public class Main{ public static void main(String[] args){ final String PASSWORD = "123456"; // 常量 Scanner input = new Scanner(System.in); String password; // 初始化为 String password = null; int i = 0; while(i<3) { System.out.print("请输入密码:"); password = input.nextLine(); i++; // Java中不允许这样判断:if(password == "123456") if(!PASSWORD.equals(password)) // 判断两个字符串是否相等,判断字符串的固定方式 PASSWORD.equals(password),为了防止password为空,所以协助括号里面 { System.out.println("输入密码错误,请重新输入!(剩余" + (3-i) + "次)"); if(i == 3) { System.out.println("密码输入超过三次,强制退出系统"); System.exit(0); } } else { i = Integer.MAX_VALUE; // 将i赋值为整型中的最大值 } } System.out.println("输入密码正确,成功登录系统!"); } }
1.2.4 某购物网站双十一2015年的成交额为800亿,每年递增20%。问:按此速度哪年交易额达到2000亿?
package com.company; import java.util.Scanner; public class Main{ public static void main(String[] args){ int year = 2015; double money = 800; while(money<2000) { money*=1.2; year++; } System.out.printf("%d年达到2000亿(%.2f亿)\n",year,money); } } // 输出:2021年达到2000亿(2388.79亿)
基本上与C语言和C++的语法相同,先执行后判断。
do{ 循环操作; }while(循环条件); 循环条件只能为boolean类型,这里与C语言和C++中不同
2.2.1
书写Java程序实现简单计算器功能,加、减、乘、除、取模。
package com.company; import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); String choice; do{ double num1,num2; // 两个参与运算的数字 double result = 0; // 运算结果 String op; // 运算符 System.out.print("请输入两个操作数:"); num1 = input.nextDouble(); num2 = input.nextDouble(); System.out.print("请输入运算符:"); op = input.next(); boolean flag1 = true; // 当做除法运算时,判断num2是否为0 boolean flag2 =true; // 判断输入的op是否为加、减、乘、除、取模中的一种 if("+".equals(op)) result = num1 + num2; else if("-".equals(op)) result = num1 - num2; else if("*".equals(op)) result = num1 * num2; else if("/".equals(op)) { if(num2!=0) result = num1 / num2; else flag1 = false; } else if("%".equals(op)) result = num1 % num2; // 在Java中浮点数是可以进行取模运算的 else flag2 = false; if(!flag1) System.out.println("输入的操作数不合法,除数不能为0!"); else if(!flag2) System.out.println("输入的运算符不合法,计算器只能进行加、减、乘、除、取模运算"); else System.out.printf("%.2f %s %.2f = %.2f\n",num1,op,num2,result); System.out.println("是否继续计算?(y/n)"); choice = input.next(); }while ("y".equals(choice)); } }
注意:在Java中两个浮点数也可以进行取模运算,但是在C语言和C++中只有整型变量可以进行取模运算。
基本上与C语言和C++的语法相同。
for(表达式1;表达式2;表达式3) { 语句; }
死循环:
for(;;) { 语句; }
3.2.1
输入n个数字,求这n个数字的平均值
package com.company; import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); // 输入n个数字,求这n个数字的平均值 int n = input.nextInt(); int sum = 0; // n的数的和 for (int i = 0; i < n; i++) { int num = input.nextInt(); sum += num; } int avg = sum/n; // 平均值(double类型也可以) System.out.println(avg); } }
3.2.2
打印月历
已知:1997年7月1日是星期二,使用循环打印1997年7月月历。
package com.company; public class Main{ public static void main(String[] args){ System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日"); System.out.print("\t\t"); int dayOfMonth = 31; // 两个\t for(int i=1;i<=dayOfMonth;i++) { int day = (i+1)%7; if(day==0) System.out.println(i); else System.out.print(i + "\t\t"); // 两个\t } } }
运行结果: