---
# System prepended metadata

title: Java基本練習題

---

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