3.java 选择,循环,判断结构

发布于:2024-06-18 ⋅ 阅读:(123) ⋅ 点赞:(0)

1.1. 选择结构

  1.1.1. if 语句

if语句通过判断判断条件是否满足,将程序的执行路径分为两条。

int x = 1;
if (x==1)
	System.out.println("1");
//以下是错误的
if (x)
	System.out.println("1");

汇总

//格式一
if (判断条件){ 
	执行语句
}

//格式二
if (判断条件){
	执行语句1
	...
}
else{
	执行语句2
	...
}

//格式三
if (判断条件1) {
	执行语句1
} 
else if (判断条件2) {
	执行语句2
}
...
else if (判断条件n) {
	执行语句n
}
else {
	执行语句n+1
}

  1. 编写一个程序,从键盘输入三个互不相同的整数,要求按输出其中第二大数
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("请输入三个互不相同的整数:");
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        int num3 = scanner.nextInt();

        // 如果输入的数字已经排序,我们不需要进一步比较
        if (num1 < num2 && num2 < num3) {
            System.out.println("第二大的数是: " + num2);
        } else if (num1 < num3 && num3 < num2) { // 或者 num3 < num1 和 num1 < num2
            System.out.println("第二大的数是: " + num3);
        } else { // num1 和 num2 是最大值,num3 是第二大的
            System.out.println("第二大的数是: " + num1);
        }

        scanner.close();
    }
}

在Java中,Scanner scanner = new Scanner(System.in) 这行代码的作用是创建一个Scanner对象,用于从标准输入(通常是键盘)读取数据。System.in是一个内置流,表示程序的标准输入源,所以当你创建一个Scanner对象并传入System.in时,你可以使用这个scanner对象来接收用户在控制台输入的数据。

例如,你可以使用scanner.nextInt()来获取用户输入的一个整数,scanner.nextLine()来获取一行文本,等等。这是处理命令行交互或用户输入常见的做法。

 1.1.2. switch语句

switch是多分支结构,实现“多选一”功能,该语句由一个控制表达式和多个case标签组成

表达式的值支持的数据类型:byte、short、char、int、枚举类型、String

case子句中的 常量值1、常量值2、常量值3、常量值4等必须是常量,对应的常量值1到常量值n必须是与之相对应的byte、short、char、int型常量,枚举类型常量,String常量,而且必须互不相同

switch语句首先计算表达式的值,如果表达式的值和某个case后面的常量值相等,就执行该case里的若干个语句直到碰到break语句为止。如果某个case中没有使用break语句,一旦表达式的值和该case 后面的常量值相等,程序不仅执行该case里的若干个语句,而且继续执行后继的case里的若干个语句,直到碰到break语句为止。

若switch语句中的表达式的值不与任何case的常量值相等,则执行default后面的若干个语句。

String.valueOf(w) 的功能是把整数w转换成字符串(w -> "w")

现在的简易写法

Scanner input = new Scanner(System.in);
System.out.print("输入一个季节1---4:");
int season = input.nextInt();  
switch (season) {
   case 1 -> System.out.println("春");
   case 2 -> System.out.println("夏");
   case 3 -> System.out.println("秋");
   case 4 -> System.out.println("冬");          
   default ->
		System.out.println("季节输入非法.");
 }

 1.1.3. switch表达式

 编写程序,从键盘输入一个年份(如2019 年)和一个月份(如2月),输出该月的天数(28)

Scanner input = new Scanner(System.in);
System.out.print("输入一个年份:");
int year = input.nextInt();
System.out.print("输入一个月份:");
int month = input.nextInt();
int numDays = switch (month) {
		case 1, 3, 5, 7, 8, 10, 12 -> 31;
		case 4, 6, 9, 11 -> 30;
		// 对2月需要判断是否是闰年
		case 2 -> {
			if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
				yield 29;
			else
				yield 28;
		}
		default -> 0;
   }; 
System.out.println("该月的天数为:" + numDays);

注意:

yield 语句用于返回一个值,并跳出当前 switch 语句块。

使用 yield 语句时,表示将后面的数值做为返回值,相当于 return 的功能,但不能使用 return 关键字,如果在case中使用return,则会立即退出当前的控制流程,导致无法执行后续的case或执行default部分。

1.2. 循环语句 

当解决具有规律性的需要重复操作的问题时,某些语句需要重复执行直至条件终止,这组被重复执行的语句称为循环体。

常见的循环语句包括:for循环、while循环、do-while循环

1.2.1. for循环

在已知循环的初始值和终止值的条件下使用,其格式如下:

for(表达式1;表达式2;表达式3){ 
	循环体 
}
//表达式1 	用于初始化循环变量和其他变量初始化工作
//表达式2  	返回布尔值的条件表达式,用于判断循环是否继续
//表达式3 	调整循环变量,改变循环条件

for循环的执行过程:

  • 先执行初始化部分(表达式1),该部分仅在循环开始时执行一次,以后不再使用
  • 然后判断循环的条件(表达式2),条件成立时执行循环体,条件不成立结束for循环
  • 最后更新循环变量的值
  • 总结
    • 先执行表达式 1 的语句
    • 判断表达式是否为真
      • 为真,则执行循环
        • 循环结束后,更新循环变量的值
      • 为假,则退出循环

循环的嵌套

用嵌套的for循环打印输出如下图形。这里,第一行输出一个星号,第二行输出3个星号,…,第8行输出15个星号。

       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************
public static void main(String[] args) {
	for (int n = 1; n <= 8; n++) {
		for (int k = 0; k < (8 - n); k++) {
			System.out.print(" ");     //输出前导空格
		}
		for (int j = 1; j <= (2 * n - 1); j++) {
			System.out.print("*");      // 输出星号
		}
		System.out.println();        // 换行
	}
}

1.2.2. while循环结构

执行while语句,当它的条件表达式为真时,while语句会重复执行一个执行语句或者语句块,其格式如下:

while(条件表达式){
	执行语句
}

while语句执行前先判断条件表达式的值,值为真则执行循环体内的执行语句,循环体执行完毕后无条件再次进行条件表达式的判断。

如果判断条件表达式的值为假,则跳过循环体转为执行while后面的语句,反之,如果判断条件表达式的值为真,则继续下一轮循环。

用while语句计算1/0!+1/1!+1/2!+1/3!+...的前20项的和

public static void main(String[] args) {
	double sum = 0, item = 1;
	int i = 0, n = 20;
	while (i < n) {
		sum = sum + item;
		item = 1.0 * item / ++i;
	}
	System.out.println("i=" + i + ",sum=" + sum);
}
//i=20,sum=2.7182818284590455

1.2.3. do-while循环结构

do-while和while循环的区别是,do-while的循环体至少被执行了一次,其结构如下

do{
	若干语句;
}
while(条件表达式);

计算s=1+3+5+...+99用while循环实现如下:

int n=1,sum=0;
while(n<=99){
	sum+=n;
	n+=2;
}
System.out.println("sum="+sum);

用do-while循环语句实现如下: 

do{
	sum+=n;
	n+=2;
}while(n<=99);
System.out.println("sum="+sum);

 1.2.4. break和continue语句

break和continue是用关键字break和continue加上分号构成的语句

break;
continue;

区别

break语句的功能对各种循环均直接退出,不再计算循环控制表达式

continue语句与break语句类似,但它只终止执行当前的循环,从下一次循环开始


网站公告

今日签到

点亮在社区的每一天
去签到