# Java基本練習題 -選擇性敘述的練習 1.選擇性敘述的練習-season 輸入月份1-12月, 利用switch判斷相對應的季節春、夏、秋、冬並印出。 若不在此範圍"輸入錯誤" ```java= import java.util.*;//Scanner/InputMismatchException class season { public static void main(String[] args) { /* 選擇性敘述的練習-season 輸入月份1-12月,利用switch判斷相對應的季節春、夏、秋、冬並印出。 若不在此範圍"輸入錯誤" */ //String陣列 儲存 春 夏 秋 冬 String[] season=new String[]{"春","夏","秋","冬"}; //使用者輸入的字 int word; //初始化Scanner 可讀入使用者輸入的內容 Scanner input=new Scanner(System.in); try { System.out.println("請輸入你想知道季節的月份(範圍為1-12)"); word=input.nextInt(); switch(word) { case 1: case 2: case 3: System.out.println(season[0]); break;//一定要寫break,不然會印出後面那三個值 case 4: case 5: case 6: System.out.println(season[1]); break; case 7: case 8: case 9: System.out.println(season[2]); break; case 10: case 11: case 12: System.out.println(season[3]); break; default: System.out.println("輸入錯誤,範圍為1-12月"); } } catch(InputMismatchException e) { System.out.println("輸入錯誤,範圍為1-12月"); } } } ``` 2.選擇性敘述的練習-salary 輸入便利商店工讀生的時數,並計算其薪資 60小時以內,時薪120元 61-80小時,以時薪1.25倍計算 81小時以上,以時薪1.5倍計算 說明:薪資以累計的方式計算。若工時為90小時,則薪資為60*120+ 20*120*1.25 + 10*120*1.5 元 ```java= import java.util.InputMismatchException; import java.util.Scanner; class salary { public static void main(String[] args) { /* 輸入便利商店工讀生的時數,並計算其薪資 60小時以內,時薪120元 61-80小時,以時薪1.25倍計算 81小時以上,以時薪1.5倍計算 說明:薪資以累計的方式計算。若工時為90小時,則薪資為60*120 + 20*120*1.25 + 10*120*1.5 元 */ int hour; double salary,rate; Scanner input=new Scanner(System.in); System.out.println("請輸入便利商店工讀生的時數,我們將計算薪資..."); try { //讀入剛輸入的時數 hour=input.nextInt(); //初始化salary=0,rate(時薪)=120 salary=0; rate=120; if(hour<=60) { salary=rate*hour; } else if (hour>60&&hour<=80) { salary=60*rate+(hour-60)*rate*1.25; } else { salary=60*rate+20*rate*1.25+(hour-80)*rate*1.5; } System.out.println("您的薪資為:"+salary); } catch(InputMismatchException e) { System.out.println("輸入錯誤,請輸入數字"); } } } ``` 3.選擇性敘述的練習-leap year閏年 輸入一西元年,判斷此年份是不是閏年 每四年一閏,每百年不閏,每四百年一閏,每四千年不閏 ```java= import java.util.*; class leap { public static void main(String[] args) { /*輸入一西元年,判斷此年份是不是閏年 每四年一閏,每百年不閏, 每四百年一閏,每四千年不閏 */ //輸入的年 int year; System.out.println("請輸入一個西元年,判斷此年份是不是閏年"); Scanner input=new Scanner(System.in); try{ year=input.nextInt(); if((year%4==0&&year%100!=0)||(year%400==0&&year%4000!=0)) { System.out.println("是"); } else { System.out.println("不是"); } } catch(Exception e) { System.out.println("輸入錯誤,請輸入年份"); } } } ``` 4. ![](https://i.imgur.com/I6ezuXT.png) ```java= class expression { public static void main(String[] args) { double sum=0; for(int i=1;i<=50;i++) { //Math.pow(10,2) = 10的平方 sum=sum+Math.pow(i,2); } System.out.println(sum); } } //42925 ``` -迴圈的練習 5.迴圈的練習-factor 輸入一個正整數,求所有的因數 說明:24的因數為 1 2 3 4 6 8 12 24 ```java= import java.util.Scanner; import java.util.InputMismatchException; class factor { public static void main(String[] args) { int num; System.out.println("請輸入一個正整數,可以協助查詢它的因數"); Scanner input=new Scanner(System.in); try { num=input.nextInt(); System.out.print(num+"的因數為 "); for(int i=1;i<=num;i++) { //可以被整除的為因數,所以印出來 if(num%i==0) { System.out.print(i+" "); } } } catch(InputMismatchException e) { System.out.println("輸入錯誤,請輸入正整數"); } } } ``` 6.找出100內的完美數 ex:6 6的因數為1,2,3 6=1+2+3 ```java= class perfect { public static void main(String[] args) { //i表示1-100(被除數) for(int i=1;i<=100;i++) { int sum=0; //找因數,j表示除數 for(int j=1;j<i;j++) { if(i%j==0) { //如果是因數,就相加 sum=sum+j; } } //相等的話,就是完美數,印出來 if(sum==i) System.out.print(i+"\t"); } System.out.println("是完美數"); } } // 6 28 ``` 7. ![](https://i.imgur.com/DVQCdSk.png) ```java= class amstrong { public static void main(String[] args) { for(int i=100;i<1000;i++) { int sum=0; //百.十.個位 sum=(int)Math.pow(i/100,3)+(int)Math.pow(i/10%10,3)+(int)Math.pow(i%10,3); if(sum==i) System.out.print(i+"\t"); } } } //153 370 371 407 ``` 8.輸入一正整數,找出所有小於或等於的質數 ```java= import java.util.Scanner; import java.util.InputMismatchException; class prime { public static void main(String[] args) { System.out.println("輸入一正整數,找出所有小於或等於的質數"); Scanner input=new Scanner(System.in); try{ int num=input.nextInt(); //被除數 for(int i=1;i<=num;i++) { //計算能被幾個數整除 int count=0; //除數 for(int j=1;j<=i;j++) { //如果被整除,count=count+1 if(i%j==0) { count++; } } //如果可以被兩個數整除(質數),因為質數的因數為自己跟1=2個數 if(count==2) { System.out.print(i+"\t"); } //重置 count=0; } } catch(InputMismatchException e) { System.out.println("輸入錯誤"); } } } ``` 9.若有一條繩子長3000公尺,每天剪去一半的長度,需要多少天繩子會短於5公尺 ```java= class rope { public static void main(String[] args) { int rope=3000; int day=0; do { //剪一半 rope=rope/2 rope/=2; //+1天 day++; //當繩子長度比5長,繼續跑迴圈,所以短於5公尺會跳出迴圈 }while(rope>=5); //輸出結果 System.out.println(day+"天"); } } //10天 ``` 10. 老王養一群兔子,若三隻三隻一數,剩餘一隻; 若五隻五隻一數,剩餘3隻; 若七隻七隻一數,剩餘2隻; 請問兔子最少有幾隻? ```java= class rabbit { public static void main(String[] args) { for(int i=1;i<100;i++) { if(i%3==1&&i%5==3&&i%7==2) { System.out.println(i+"隻"); break; } } } } //58 ``` -函數的練習 11.寫一個函數power(x,n)用來計算x的n次方 ```java= class test1 { public static void main(String[] args) { System.out.println(power(5,3)); } public static double power(double x,double n) { return Math.pow(x,n); } } ``` 12.寫一個函數isPrime(n),用來判斷n是否為質數 ```java= class test2 { public static void main(String[] args) { System.out.println(isPrime(6)); } public static boolean isPrime(int x) { int count=0; for(int i=1;i<=x;i++) { if(x%i==0) { count++; } } if(count==2) { return true; } else { return false; } } } ``` 13.寫一個函數isPrime(n),用來找出第n個質數 ```java= import java.util.Scanner; import java.util.InputMismatchException; class test3 { public static void main(String[] args) { System.out.println("請輸入一個數,將會輸出第N個質數的值(168以內)"); Scanner input=new Scanner(System.in); try { int num=input.nextInt(); //使用函數輸出結果 System.out.println(prime(num)); } catch(InputMismatchException e) { System.out.println("輸入錯誤,請輸入數字"); } } public static int prime(int num) { //c計算是第幾個質數,ans存放答案 int c=0,ans=0; //被除數 for(int i=0;i<=1000;i++) { //計算共被除了幾次 int count=0; //除數 for(int j=1;j<=i;j++) { //整除 count++ if(i%j==0) count++; } //count==2 表示是質數 因為質數只會被2個數整除 if(count==2) { //那這就是第一個質數 c++; } //如果相等,即為答案 if(c==num) { ans=i; break;//因為當c==num,下個數如不是質數,則會蓋掉這個值 } } return ans; } } ``` 14.mersennePrime ![](https://i.imgur.com/m4HJIlC.png) ```java= class test4 { public static void main(String[] args) { //計算數到第幾個梅森質數 int c=0; for(int i=2;i<=30;i++) { int count=0; for(int j=1;j<=i;j++) { if(i%j==0) { count++; } } if(count==2) { //符合梅森質數就印出來 if(isMersennePrime(i)) { System.out.print(i+"\t"); c++; } } //第六個數,跳出迴圈 if(c==6) { break; } } } public static boolean isMersennePrime(int num) { //Math.pow()方法會變質數,所以要轉回int型態 int n=(int)(Math.pow(2,num)-1); //判斷是否為梅森質數-以算出來的n是否也是質數判斷 int count=0; for(int j=1;j<=n;j++) { if(n%j==0) { count++; } } if(count==2) { return true; } else { return false; } } } ```