Java-day05研究ノート

2021-01-04

day04レビュー

ここに画像の説明を挿入

ケースを紹介する

请在控制台打印10:HelloWorld!!!

public class Demo {
    
    
	
	public static void main(String[] args) {
    
    
	
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
		System.out.println("HelloWorld!!!");
	}
}

问题:代码重复度太高,这种情况又被我们称为代码的冗余。
解决:在Java中对代码冗余这个问题的解决方式为循环语句。

1つ、ループ

1.1ループの概要

现实世界中的循环:一周七天的轮换、一年四季的轮换、秒针的转动
Java中的循环:针对某些重复性的相同的或者相似的代码,用特定的语句结构进行改进。

1.2分類

for循环
while循环
do...while循环

2、whileループ

2.1フォーマット

基本格式:
    while(关系表达式) {
    
    
        循环体语句;
    }

扩展格式:
    初始化语句;
    while(关系表达式) {
    
    
        循环体语句;
        初始化语句的改变;
    }

格式的解释:
1. 初始化语句:就是用来定义一个变量,让其进行改变。(只在开始的时候执行一次)
2. 关系表达式:其结果必须为boolean类型,要么是true,要么是false
3. 循环体语句:要重复执行的相同的或者相似的代码,可以是一句或者多句
4. 初始化语句的改变:就是对初始化语句定义的变量进行改变,这个改变都是向着循环结束的方向渐进。
//使用while改进引入案例:
public class Demo2 {
    
    
	
	public static void main(String[] args) {
    
    
		
		int i = 0;
		while(i < 10) {
    
    
			
			System.out.println("HelloWorld!!!");
			i++;
		}	
	}
}

2.2実行プロセス

1. 执行初始化语句
2. 执行关系关系表达式,看结果是true还是false
		---> 如果是false,那么结束循环
		---> 如果是true,那么执行循环体语句,并进行下一步
3. 初始化语句改变
4. 回到2

ここに画像の説明を挿入

练习:
1. 在控制台打印1-10
2. 在控制台打印10-1
3. 求整数1-100的和
4. 已知珠穆朗玛峰的高度为8848m,一张纸的厚度为0.01m,
	那么请问这张纸对折多少次后能超过珠穆朗玛峰的高度。
/*
	需求1. 在控制台打印1-10
 */
public class Test {
    
    
	
	public static void main(String[] args) {
    
    
	
		int i = 1;
		while(i <= 10) {
    
    
			System.out.println(i);
			i++;
		}
	}
}

/*
	需求2. 在控制台打印10-1
 */
public class Test2 {
    
    
	
	public static void main(String[] args) {
    
    
	
		int i = 1;
		while(i <= 10) {
    
    
			System.out.println(11-i);
			i++;
		}
	}
}

/*
	需求3. 求整数1-100的和
	
	1 2 3 4 5 6 ... 98 99 100
	
	0+1 = 1
	1+2 = 3
	3+3 = 6
	6+4 = 10
	10+5 = 15
	15+6 = 21
	...
	
 */
public class Test3 {
    
    
	
	public static void main(String[] args) {
    
    
	
		//定义一个变量用来存储和
		int sum = 0;
		
		int i = 1;
		while(i <= 100) {
    
      //i = 1 2 3 4 ...99 100
		
			//sum = sum + i;
			sum += i;
			
			i++;
		}
	
		System.out.println("1-100的和为:" + sum);
	}
}
/*	
	已知珠穆朗玛峰的高度为8848m,一张纸的厚度为0.01m,
	那么请问这张纸对折多少次后能超过珠穆朗玛峰的高度。
 */
public class Test9 {
    
    
	
	public static void main(String[] args) {
    
    

		double high = 8848;
		double height = 0.01;
		
		//定义一个变量,用来统计纸对折了多少次
		int count = 0;

		//如果纸的厚度小于8848m,那么就进入while循环继续对折
		while(height <= 8848){
    
    
			
			//纸进行对折,每次都相当于乘以2
			height *= 2;
			
			System.out.println("第" + (++count) + "次高度为:" + height);
		}
	
	}
}

三、do…while

基本格式:
    do {
    
    
        循环体语句;
    } while (关系表达式);

扩展格式:
    初始化语句;
    do {
    
    
        循环体语句;
        初始化语句的改变;
    }while(关系表达式);

3.1 do ... whileループとwhileループの違い

do...while语句至少会执行一次

4、forループ

4.1フォーマット

for(初始化语句; 关系表达式; 初始化的改变){
    
    
	
	循环体语句;
}

格式的解释:
    1. 初始化语句:就是用来定义一个变量,然后让其进行改变,此语句只在开始的时候执行一次
    2. 关系表达式:其结果必须为boolean类型,要么是true,要么是false
    3. 初始化语句的改变:可以递增、也可以递减,主要改变是向着循环结束的方向进行即可
    4. 循环体语句:就是用来重复执行的代码,可以是一句或多句

4.2forループとwhileループの違い

1. for循环能限定变量的声明周期,在使用完毕之后就立即被回收了,节省内存。
	而while循环在使用完毕并没有被回收,造成了内存的浪费。
2. for一般用于此处明确的循环,而while一般用于次数不明确的循环。
练习:(用for循环)
1. 在控制台打印1-10
2. 在控制台打印10-1

3.1-100的整数和
4.1-100内的偶数和
5.1-100内的奇数和

6. 打印四叶玫瑰数并统计其个数
/*
	1. 在控制台打印1-10
	2. 在控制台打印10-1

	3. 求1-100的整数和
	4. 求1-100内的偶数和
	5. 求1-100内的奇数和

	6. 打印四叶玫瑰数并统计其个数
 */
public class Test {
    
    
	
	public static void main(String[] args) {
    
    
	
		
		/*
		//1. 在控制台打印1-10
		for(int i = 0; i < 10; i++){
			
			System.out.println(i+1);
		}
		
		//2. 在控制台打印10-1
		for(int i = 0; i < 10; i++){
			
			System.out.println(10-i);
		}
		
		//3. 求1-100的整数和
		int sum = 0;
		for(int i = 1; i <= 100; i++){  //i = 1 2 3 4 ... 99 100
			
			sum = sum + i;
		}
		System.out.println("1-100的整数和为:" + sum);
	
		//4. 求1-100内的偶数和
		//5. 求1-100内的奇数和
		int sum_ou = 0;
		int sum_ji = 0;
		for(int i = 0; i <= 100; i++){
			
			if(i % 2 == 0){
				
				sum_ou += i;
			}else{
				
				sum_ji += i;
			}
		}
		System.out.println("偶数和为:" + sum_ou + ",奇数和为:" + sum_ji);
		*/
		
		//6. 打印四叶玫瑰数并统计其个数
		int count = 0;
		for(int i = 1000; i < 10000; i++){
    
    
			
			int ge = i % 10;
			int shi = i / 10 % 10;
			int bai = i / 100 % 10;
			int qian = i / 1000;
			
			if(i == (ge*ge*ge*ge + shi*shi*shi*shi + bai*bai*bai*bai + qian*qian*qian*qian)){
    
    
				
				count++;
				System.out.println(i);
			}
		}
		System.out.println("共有:" + count + "个四叶玫瑰数");
		
		
	}
}

5、ループネスティング用

5.1フォーマット

//外层for
for(初始化语句; 关系表达式; 初始化语句的改变){
    
    
	//内层for
	for(初始化语句; 关系表达式; 初始化语句的改变){
    
    
	
		循环体语句;
	}
}

注意:
	1. for循环的嵌套就是将一个for循环的循环语句体用另一个for循环进行替换。
	2. 外层for每执行一次,内层for都要全部执行完毕
练习:
	打印出如下星星:
1.
	*****
	*****
	*****
	*****
	*****
2.
	*
	**
	***
	****
	*****
3. 
	    *
	   **
	  ***
	 ****
	*****
4.
	*****
	 ****
	  ***
	   **
		*
/*
	在控制台打印如下星星
		*****
		*****
		*****
		*****
		*****
 */
public class Test {
    
    
	
	public static void main(String[] args) {
    
    
	
		//外层for:控制行
		for(int j = 0; j < 5; j++){
    
    
			//内层for:控制列
			for(int i = 0; i < 5; i++){
    
    
			
				/*
					注意:
						println是换行打印
						print是打印不换行
				 */
				//System.out.println("*");  
				System.out.print("*");
			}
			
			//每打印一行就换行
			System.out.println();
		}
		
	}
}
/*
	在控制台打印如下图形
		*
		**
		***
		****
		*****
 */
public class Test2 {
    
    
	
	public static void main(String[] args) {
    
    
	
		for(int i = 1; i <= 5; i++){
    
    
			for(int j = 1; j <= i; j++){
    
    
				
				System.out.print("*");
			}
			
			System.out.println();
		}
	
	}
}
/*
	在控制台打印如下图形:
			*   
		   **
		  ***
		 ****
		*****
		
	结果观察,我们发现:
	第一行: 4个空格 1个*
	第二行: 3个空格 2个*
	第三行: 2个空格 3个*
	第四行: 1个空格 4个*
	第五行: 0个空格 5个*
 */
public class Test3 {
    
    
	
	public static void main(String[] args) {
    
    
		
		//外层for:控制行
		for(int i = 1; i <= 5; i++){
    
    
			
			//打印空格
			for(int j = 0; j < 5-i; j++){
    
    
				
				System.out.print(" ");
			}
			//打印星星
			for(int k = 0; k < i; k++){
    
    
				
				System.out.print("*");
			}
			
			//换行
			System.out.println();
		}
	}
}
/*
	*****
	 ****
	  ***
	   **
		*
*/
for(int i = 0;i < 5;i++){
    
    
	for(int j = 0;j < i;j++){
    
    
		System.out.print(" ");
	}
	for(int k = 0;k <= 4 - i;k++){
    
    
		System.out.print("*");
	}
	System.out.println("");
}
练习:打印九九乘法表
for(int i = 1;i < 10;i++){
    
    
	for(int j = 1;j <= i;j++){
    
    
		System.out.print(j + " * " + i + " = " + i*j + "  ");
	}
	System.out.println("");
}

ここに画像の説明を挿入

上の図は、パーツが位置合わせされていないことを示しています。コードが最適化され
ています。3項式を使用して、積が1桁の場合は3スペースを追加し、積が2桁の場合は2スペースを追加します。

for(int i = 1;i < 10;i++){
    
    
	for(int j = 1;j <= i;j++){
    
    
		System.out.print(j + " * " + i + " = " + i*j + ((i*j >= 10)? "  ":"   "));
	}
	System.out.println("");
}

整列

おすすめ

転載: blog.csdn.net/ChangeNone/article/details/112189437