# 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;
}
}
}
```