Java 之循环
一、while循环
1.基本语法
基本上与C语言和C++的语法相同,先判断后执行。
while(循环条件) // 循环条件只能为boolean类型,这里与C语言和C++中不同
{
循环操作语句;
}
死循环:
while(true){
循环操作语句;
}
2.while循环案例
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亿)
二、do-while循环
1.基本语法
基本上与C语言和C++的语法相同,先执行后判断。
do{
循环操作;
}while(循环条件); 循环条件只能为boolean类型,这里与C语言和C++中不同
死循环:
do{
循环操作;
}while(true);
2.do-while循环案例
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++中只有整型变量可以进行取模运算。
三、for循环
1.基本语法
基本上与C语言和C++的语法相同。
for(表达式1;表达式2;表达式3)
{
语句;
}
死循环:
for(;;)
{
语句;
}
2.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
}
}
}
运行结果: