1. 程式人生 > >Java SE 第四章

Java SE 第四章

第4章 迴圈語句
4.1 while迴圈
示例:猜數字
在這裡插入圖片描述

import java.util.Scanner;


public class Test4_1 {
	public static void main(String[] args){
		Scanner scanner=new Scanner(System.in);
		int number=(int)Math.random()*101;
		while(true){
			System.out.print("請輸入一個數字(在0~100之間,包含0和100):");
			int n=scanner.nextInt();
			if(n>number){
				System.out.println("太大了");
			}else if(n<number){
				System.out.println("太小了");
			}else{
				System.out.println("恭喜你,猜對了!答案就是"+number);
				return;
			}
		}
	}
}

4.2 do-while迴圈
在這裡插入圖片描述
4.3 for迴圈
※ for語句
在這裡插入圖片描述
※ for巢狀語句

※ 示例:最大公約數
在這裡插入圖片描述

import java.util.Scanner;


public class Test4_3 {
	public static void main(String[] args){
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入兩個數:");
		int m=scanner.nextInt();
		int n=scanner.nextInt();
		int Thesmall=Math.min(m, n);
		for(int i=Thesmall;i>=1;i--){
			if(m%Thesmall==0&&n%Thesmall==0){
				System.out.println("這兩個數的最大公約數是:"+Thesmall);
				return;
			}
		}
	}
}

示例:預測未來學費
在這裡插入圖片描述

public class Test4_4 {
	public static void main(String[] args){
		int year=0;
		double Allmoney=10000;
		while(true){
			Allmoney*=1.07;
			year++;
			if(Allmoney>=20000){
				System.out.println(year);
				System.out.println(Allmoney);
				return;
			}
			
		}
	}

}

示例:將十進位制轉換為十六進位制
在這裡插入圖片描述

import java.util.Scanner;


public class Test4_5 {
	public static void main(String[] args){
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入一個正整數:");
		int number=scanner.nextInt();
		String str="";
		while(number!=0){
			int num=number%16;
			if(num<10){
				str=num+str;
				
			}else{
				switch(num){
					case 10:
						str="A"+str;
						break;
					case 11:
						str="B"+str;
						break;
					case 12:
						str="C"+str;
						break;
					case 13:
						str="D"+str;
						break;
					case 14:
						str="E"+str;
						break;
					case 15:
						str="F"+str;
						break;
				}
			}
			number/=16;
		}
		
		System.out.println("OX"+str);
	}
}

4.4 巢狀迴圈
※ 示例:列印直角三角形


public class Test5_1 {
	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();
		}
	}
	
}

※ 示例:列印菱形


public class Test5_1 {
	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();
		}
	}
	
}

※ 示例:列印空心菱形


public class Test4_5 {
	public static void main(String[] args) {
		for(int i=1;i<=9;i++){
			for(int j=1;j<=Math.abs(i-5);j++){
				System.out.print(" ");
			}
			
			for(int k=1;k<=i&&k+i<=10;k++){
				if(k==1||k==i||k+i==10){
					System.out.print("* ");
				}else{
					System.out.print("  ");
				}
			}
			System.out.println();
		}
		
	}
}

4.5 break和continue
※ break語句
break語句有三種用法,第一種是用於終止switch語句中的語句序列,第二種是用於退出迴圈,然而第三種是用作goto語句的“文明”形式!
※ continue語句
continue語句只能使用在迴圈語句內部,功能是跳過該次迴圈,繼續執行下一次迴圈結構。在while 和 do while語句中continue語句跳轉到迴圈條件處開始繼續執行,而在for語句中continue語句跳轉到迭代語句處開始繼續執行。

int i= 0;
while(i<4){
    i ++;
    if(i == 2){
    continue;
    }
   systerm.out.println(i);
}

執行結果:1 3 4

※ return語句
Java中return用於方法,兩個作用:
(1)返回方法指定型別的值(這個值總是確定的),也可以是物件
(2)方法的結束

兩種形式:(1)有返回型別 例如:return i;

      (2)無返回型別  return;

一般方法前有void代表無返回值,沒有void有返回值。
※ 示例:判斷迴文串


public class Test4_6 {
	public static void main(String[] args) {
		boolean flag=true;
		String s="上海自來水來自海上";
		for(int m=0,n=s.length()-1;m<s.length()/2&&n>s.length()/2;m++,n--){
			if(s.charAt(m)!=s.charAt(n)){
				flag=false;
				break;
			}
		}
		if(flag){
			System.out.println("是迴文數字");
		}else{
			System.out.println("不是迴文數字");
		}
	}
}

※ 顯示素數


public class Test4_7 {
	public static void main(String[] args) {
		int count=0;
		int number=1;
		while(count<=50){
			boolean flag=true;
			for(int i=2;i<=number/2;i++){
				if(number%i==0){
					flag=false;
					break;
				}
			}
			if(flag){
				System.out.print(number+" ");
				count++;
				if(count%10==0){
					System.out.println();
				}
			}
			number++;
		}
	}
}

本章小結
1.迴圈語句有三類: while 迴圈、 do-while 迴圈和 for 迴圈。
2.迴圈中包含重複執行的語句的部分稱為迴圈體。
3.迴圈體執行一次稱為迴圈的一次迭代。
4.無限迴圈是指迴圈語句被無限次執行。
5.在設計迴圈時, 既需要考慮迴圈控制結構, 還需要考慮迴圈體。
6.while 迴圈首先檢査迴圈繼續條件。 如果條件為 true, 則執行迴圈體; 如果條件為 false, 則迴圈結 束。
7.do-while 迴圈與 while 迴圈類似, 只是 do-while 迴圈先執行迴圈體, 然後再檢査迴圈繼續條件, 以確定是繼續還是終止。
8.while 和 do-while 迴圈常用於迴圈次數不確定的情況。
9.標記值是一個特殊的值, 用來標記迴圈的結束。
10.for 迴圈一般用在迴圈體執行次數固定的情況。
11.for 迴圈控制由三部分組成。 第一部分是初始操作, 通常用於初始化控制變數。 第二部分是迴圈繼 續條件, 決定是否執行迴圈體。 第三部分是每次迭代後執行的操作, 經常用於調整控制變數。 通常, 在控制結構中初始化和修改迴圈控制變數。
12.while 迴圈和 for 迴圈都稱為前測迴圈( pretest loop), 因為在迴圈體執行之前, 要檢測一下迴圈 繼續條件。
13.do-while 迴圈稱為後測迴圈( posttest loop), 因為在迴圈體執行之後, 要檢測一下這個條件。
14.在迴圈中可以使用 break 和 continue 這兩個關鍵字。
15.關鍵字 break 立即終止包含 break 的最內層迴圈。
16.關鍵字 continue 只是終止當前迭代。

程式設計練習題
在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_1 {
	public static void main(String[] args) {
		int positivenumber=0;
		int positivesum=0;
		int negativesum=0;
		int negativenumber=0;
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter an integer ,the input ends if it is o:");
		
		while(true){
			int integer=scanner.nextInt();
			if(integer>0){
				positivenumber++;
				positivesum+=integer;
				
			}else if(integer<0){
				negativenumber++;
				negativesum+=integer;
				
			}else{
				break;
			}
		}
		int sum=positivesum+negativesum;
		double average=1.0*sum/(positivenumber+negativenumber);
		System.out.println("The number of positive is:"+positivenumber);
		System.out.println("The number of negative is:"+negativenumber);
		System.out.println("The total is:"+sum);
		System.out.println("The average is:"+average);
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_2 {
	public static void main(String[] args) {
		double firstScore=0.0;
		double secondScore=0.0;
		String firstName="";
		String secondName="";
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入學生的個數:");
		int sum=scanner.nextInt();
		
		for(int n=1;n<=sum;n++){
			System.out.print("請輸入分數:");
			double score=scanner.nextDouble();
			System.out.print("請輸入姓名:");
			String name=scanner.next();
			if(score>=firstScore){
				secondScore=firstScore;
				secondName=firstName;
				firstScore=score;
				firstName=name;
			}else{
				if(score>secondScore){
					secondScore=score;
					secondName=name;
				}
			}
		
		
		}
		System.out.println("第一高分是:"+firstScore+"姓名是:"+firstName);
		System.out.println("第二高分是:"+secondScore+"姓名是:"+secondName);
	}
}


在這裡插入圖片描述


public class Demo4_3 {
	public static void main(String[] args) {
		int count=0;
		for(int n=100;n<=200;n++){
			if(n%5==0&&n%6!=0||n%6==0&&n%5!=0){
				System.out.print(n+" ");
			
				count++;
				if(count%10==0){
				System.out.println();
				}
			}
		}
	}
}

在這裡插入圖片描述


public class Demo4_4 {
	public static void main(String[] args) {
		int n=1;
		while(n*n<=12000){
			n++;
		}
		System.out.println(109*109);
		System.out.println(n);//110
		n=1;
		while(n*n*n<=12000){
			n++;
		}
		System.out.println(n*n*n);
		System.out.println(n-1);
		System.out.println(22*22*22);
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_5 {
	public static void main(String[] args) {
		
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter a number:");
		int number=scanner.nextInt();
		while(true){
			boolean flag=false;
			for(int i=2;i<=number/2;i++){
				if(number%i==0){
					System.out.print(i+" ");
					number/=i;
					flag=true;
					break;
				}
			}
			if(!flag){
				System.out.print(number);
				break;
			}
		}
	}
}


在這裡插入圖片描述



public class Demo4_6 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter the line:");
		int line=scanner.nextInt();
		for(int i=1;i<=line;i++){//行數
			for(int k=1;k<=line-i;k++){
				System.out.print("   ");
			}
			//-1 
			//-2 -1   2
			for(int j=-i;j<=i;j++){
				if(j!=0&&j!=1){
//					System.out.print(Math.abs(j)+"\t");
					System.out.printf("%-3d",Math.abs(j));
					//3d "  1" " 12" "123"
					//-3d "1  " "12 " "123"
				}
			}
			System.out.println();
		}
	}
}

在這裡插入圖片描述


public class demo4_7 {
	public static void main(String[] args) {
//		for(int i=1;i<=6;i++){
//			for(int j=1;j<=i;j++){
//				System.out.print(j);
//			}
//			System.out.println();
//		}
//		for(int i=1;i<=6;i++){
//			for(int j=1;j<=7-i;j++){
//				System.out.print(j);
//			}
//			System.out.println();
//		}
//		for(int i=1;i<=6;i++){
//			for(int j=1;j<=6-i;j++){
//				System.out.print(" ");
//			}
//			for(int k=i;k>=1;k--){
//				System.out.print(k);
//			}
//			System.out.println();
//		}
		for(int i=1;i<=6;i++){
			for(int j=1;j<=i-1;j++){
				System.out.print(" ");
			}
			for(int k=1;k<=7-i;k++){
				System.out.print(k);
			}
			System.out.println();
		}
	}
	
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_8 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入行數:");
		int line=scanner.nextInt();
		for(int i=1;i<=line;i++){
			for(int j=1;j<=line-i;j++){
				System.out.print("    ");
			}
			for(int k=-(i-1);k<=i-1;k++){
				if(k<=0){
					System.out.printf("%-4d",(int)Math.pow(2,k+i-1));
				}else{
					System.out.printf("%-4d",(int)Math.pow(2,-k+i-1));
				}
			}
			System.out.println();
		}
	}
}

在這裡插入圖片描述


public class Demo4_9 {
	public static void main(String[] args) {
		double num=0;
		for(int n=1;n<=49;n++){
			num+=1.0*(2*n-1)/(2*n+1);
		}
		System.out.println(num);
	}
}

在這裡插入圖片描述


public class Demo4_10 {
	public static void main(String[] args) {
		double flag=1.0;
		double sum=0.0;
		for(int i=1;i<=10000;i++){
			sum+=1.0*flag/(2*i-1);
			flag=-flag;
		}
		System.out.println(4*sum);
	}
}

在這裡插入圖片描述



public class Demo4_11 {
	public static void main(String[] args) {
		double e=1;
		for(int i=1;i<=10000;i++){
			double multi=1.0;
			//i=5
			for(int j=1;j<=i;j++){
				multi=multi*j;
			}
			e=e+1/multi;
		}
		System.out.println(e);
	}
}

在這裡插入圖片描述


public class Demo4_12 {
	public static void main(String[] args) {
		int count=0;
		for(int n=101;n<=2100;n++){
			if(n%4==0&&n%100!=0||n%400==0){
				System.out.print(n+" ");
				count++;
				if(count%10==0){
					System.out.println();
			}
			
			}
		}
	}
}

在這裡插入圖片描述

import java.util.Scanner;
public class Demo4_13 {
	public static void main(String[] args) {
		//輸入年份 星期
		//輸出每個月的第一天是星期幾
		//1.1 2.1 3.1...12.1
		int year;
		int week;
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter year and week:");
		year=scanner.nextInt();//2013
		week=scanner.nextInt();
		int m=0,y=0,k=0,j=0,h=0;
		String monthStr="";
		String weekStr="";
		for(int month=1;month<=12;month++){
			m=month;
			y=year;//2013
			if(m==1||m==2){
				m+=12;
				y--;
			}
			k=y%100;
			j=y/100;
			h=(1+26*(month+1)/10+k+k/4+j/4+5*j)%7;
			switch (month) {
				case 1:
					monthStr="January";
					break;
				case 2:
					monthStr="February";
					break;
				case 3:
					monthStr="March";
					break;
				case 4:
					monthStr="April";
					break;
				case 5:
					monthStr="May";
					break;
				case 6:
					monthStr="June";
					break;
				case 7:
					monthStr="July";
					break;
				case 8:
					monthStr="August";
					break;
				case 9:
					monthStr="September";
					break;
				case 10:
					monthStr="October";
					break;
				case 11:
					monthStr="November";
					break;
				case 12:
					monthStr="December";
					break;
			}
			switch (h) {
				case 0:
					weekStr="Saturday";
					break;
				case 1:
					weekStr="Sunday";
					break;
				case 2:
					weekStr="Monday";
					break;
				case 3:
					weekStr="Tuesday";
					break;
				case 4:
					weekStr="Wednesday";
					break;
				case 5:
					weekStr="Thursday";
					break;
				case 6:
					weekStr="Friday";
					break;
			}
			System.out.println(monthStr+" 1,"+year+" is "+weekStr);
		}
	}
}

在這裡插入圖片描述


public class Demo4_15 {
	public static void main(String[] args) {
		int sum=0;
		for(int i=1;i<=10000;i++){
			for(int n=1;n<=i/2;n++){
				if(i%n==0){
					sum+=n;
				}
			}
			if(sum==i){
				System.out.println(i);
			}
			sum=0;
		}
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_16 {
	public static void main(String[] args) {
		//定義兩個計數器 分別記錄電腦贏得次數和玩家贏得次數
		//cCount pCount;
		int cCount=0;
		int pCount=0;
		Scanner scanner=new Scanner(System.in);
		while(true){
			System.out.print("請輸入 0剪刀 1石頭 2布:");
			int p=scanner.nextInt();
			int c=(int) (Math.random()*3);
			
			if(p==c){
				System.out.println("平局,請繼續!");
			}
			if(p==0&&c==1){
				System.out.println("玩家剪刀,電腦石頭,電腦贏!");
				cCount++;
			}
			if(p==0&&c==2){
				System.out.println("玩家剪刀,電腦布,玩家贏!");
				pCount++;
			}
			if(p==1&&c==0){
				System.out.println("玩家石頭,電腦剪刀,玩家贏!");
				pCount++;
			}
			if(p==1&&c==2){
				System.out.println("玩家石頭,電腦布,電腦贏!");
				cCount++;
			}
			if(p==2&&c==0){
				System.out.println("玩家布,電腦剪刀,電腦贏!");
				cCount++;
			}
			if(p==2&&c==1){
				System.out.println("玩家布,電腦石頭,玩家贏!");
				pCount++;
			}
			if(cCount==2||pCount==2){
				break;
			}
		}
		if(cCount==2){
			System.out.println("最終 電腦獲勝");
		}else{
			System.out.println("最終 玩家獲勝");
		}
	}
}

在這裡插入圖片描述


public class Demo4_17 {
	public static void main(String[] args) {
		double sum=0.0;
		for(int i=1;i<=624;i++){
			
			sum+=1.0/(Math.sqrt(i)+Math.sqrt(i+1));
		}
		System.out.println(sum);
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_18 {
	public static void main(String[] args) {
		String s="";	
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入一個十進位制數字:");
		int number=scanner.nextInt();
		while(true){
			int n=number%2;
			s=n+s;
			number/=2;
			if(number==0){
				break;
			}
		}
		System.out.println("0"+s);
	
	}
}

import java.util.Scanner;


public class Demo4_18 {
	public static void main(String[] args) {
		String s="";	
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入一個八進位制數字:");
		int number=scanner.nextInt();
		while(true){
			int n=number%8;
			s=n+s;
			number/=8;
			if(number==0){
				break;
			}
		}
		System.out.println("0"+s);
	
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_19 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int max=0;
		int count=0;
		System.out.print("請輸入一串數字,並且以0結束輸入:");
		while(true){
			int number=scanner.nextInt();
			if(number>max){
				max=number;
				count=1;
			}else if(number==max){
				count++;
			}else if(number==0){
				break;
			}
		}
		System.out.println("最大的數字為:"+max);
		System.out.println("出現的次數為:"+count);
	}
}

在這裡插入圖片描述


public class Demo4_20 {
	public static void main(String[] args) {
		int count=0;
		for(int n=1;n<=7;n++){
			for(int m=n+1;m<=7;m++){
				System.out.println(n+":"+m);
				count++;
			}
		}
		System.out.println(count);
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_21 {
	public static void main(String[] args) {
		//總和 sum 所有數字的和
		//平方和 powSum 所有數字的平方的和
		Scanner scanner=new Scanner(System.in);
		double sum=0;
		double powSum=0;
		System.out.print("Enter 10 numbers:");
		for(int i=1;i<=10;i++){
			double num=scanner.nextDouble();
			sum+=num;
			powSum+=num*num;
		}
		double mean=sum/10;
		double sd=Math.sqrt(  (powSum-sum*sum/10)/9 );
		System.out.println("mean ="+mean);
		System.out.println("sd ="+sd);
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_21 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入第一個字串:");
		String s1=scanner.nextLine();
		System.out.print("請輸入第二個字串:");
		String s2=scanner.nextLine();
		int min=Math.min(s1.length(), s2.length());
		for(int i=0;i<=min-1;i++){
			if(s1.charAt(i)==s2.charAt(i)){
				System.out.print(s1.charAt(i));
			}else if(s1.charAt(i)!=s2.charAt(i)){
				break;
			}
		}
	}
}

在這裡插入圖片描述

import java.util.Scanner;
public class Demo4_23 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter a string:");
		String str=scanner.nextLine();
		int count=0;
		for(int i=0;i<str.length();i++){
			if(str.charAt(i)>=65&&str.charAt(i)<=90){
				count++;
			}
		}
		System.out.println(count);
	}
}

在這裡插入圖片描述

import java.util.Scanner;


public class Demo4_23 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("請輸入一個字串:");
		String s=scanner.nextLine();
		int n=s.length()-1;
		for(int i=0;i<=n;i++){
			if(i%2==0){
				System.out.print(s.charAt(i));
			}
		}
	}
}