---
# System prepended metadata

title: 'Java第八週[JPA303~305 完美數(判斷因質數)、while、do_while迴圈運用、for迴圈+if判斷式]'
tags: [複習用, JAVA課堂學習, 高科大]

---

# Java第八週[JPA303~305 完美數(判斷因質數)、while、do_while迴圈運用、for迴圈+if判斷式]

#### 複習用

## 開始解題(JPA303~305):

### 第一題(JPA303)-完美數[判斷因數公式]:

![](https://i.imgur.com/n2WcMOH.png)
解答:
```java
import java.util.Scanner;    //沒用到
public class JPA303 
{
	public static void main(String[] args) 
	{
        	int i, num, sum = 0;//題給
        	System.out.printf("1~1000中的完美數有: ");//題給

        	for(num=1;num<=1000;num++) //設num為1~1000
		{
			sum=0;      //每跑一個num清為0(將總和清為0)

            		for(i=1;i<num;i++)  //判斷因數的公式
			{	            //尋找num的因數
                            if(num%i==0) 
			     {
					sum+=i; //題目要求條件(完美數-因數相加)
		             }
	            	}
            		if(sum==num)  //題目要求條件(完美數相等)
			{
                		System.out.printf("%d ",num); //題給
            		}
        	}
       		System.out.printf("\n");    //題給
    	}
}
```
---
### 第二題(JPA303_2)-列出2~1000哪些是質數?[判斷因數公式]:
![](https://i.imgur.com/8hgABql.jpg)
神奇小手手 ヾ(*´∇`)ﾉ

解答:
```java
import java.util.Scanner;
public class JPA303_2
{
	public static void main(String[] args) 
	{
        	int i, num,count=0;
        	System.out.printf("2~1000中的質數有: ");

        	for(num=2;num<=1000;num++)
		{
			count=0;

            		for(i=1;i<=num;i++)
			{	if(num%i==0)
				{
					count++;  //質數判斷(加總因數)
				}
	            	}
            		if(count==2)	//質數判斷(1和本身)
			{
                		System.out.printf("%d ",num);
            		}
        	}
       		System.out.printf("\n");
    	}
}
```
---
### 第三題(JPA304)-餐點費用[while迴圈]:
#### while迴圈特殊用法
當圈數未知時，使用while(前測式迴圈)
```java=1
while(true)    //條件永遠成立 
{
break;        //因為沒有條件，所以會有無窮迴圈   //因此要使用break強制跳出
}
```
![](https://i.imgur.com/O1V4RRM.png)
解答:
```java
import java.util.Scanner;
public class JPA304 
{    	
	static Scanner keyboard=new Scanner(System.in);
	public static void main(String[] args) 
	{
        	int total = 0;    //總金額
        	int s = 0;        //輸入的金額 (餐點費)
        	int count = 0;    //用餐人數 (題設五位朋友)
        	double average;   //計算平均
        
		while(true)    //無窮迴圈
		{
			System.out.print("Please enter meal dollars or enter -1 to stop: ");
			s=keyboard.nextInt();		

			if(s!=-1)        //無窮迴圈  //(=-1)代表輸入完畢
			{
				total+=s;    //加總金額
				count++;    //算 幾道菜，為了求平均值
			}
			else    //s=-1
			{
				break;    //while強制跳出，不然他會一直跑
			}
		}     
		average=(double)total/count; //(double)強制浮點數
  		System.out.println("餐點總費用:" + total);
        	System.out.printf(" %d 道餐點平均費用為: %.2f \n",count,average);
        }
}
```
---
### 第四題(JPA304_2)餐點費用-[do while迴圈]:
* 改用do while解答
![](https://i.imgur.com/1FWlLzz.jpg)
解答:
```java
import java.util.Scanner;
public class JPA304_2 
{    	
	static Scanner keyboard=new Scanner(System.in);
	public static void main(String[] args) 
	{
        	int total = 0;
        	int s = 0;
        	int count = 0;
        	double average;
        
		do
		{
			System.out.print("Please enter meal dollars or enter -1 to stop: ");
			s=keyboard.nextInt();		

			total+=s;	//加總金額
			count++;	//算 幾道菜，為了求平均值
			
		}while(count<5);    //限定5筆以內(已給條件，自動跳出)
	     
		average=(double)total/count; 

  		System.out.println("餐點總費用:" + total);
        	System.out.printf(" %d 道餐點平均費用為: %.2f \n",count,average);
        }
}
```
---
### 第五題(JPA305)-迴圈階乘計算[if判斷+階乘計算]:
![](https://i.imgur.com/R6MTQzW.png)
解答:
```java
import java.util.Scanner;
public class JPA305 
{
	static Scanner keyboard = new Scanner(System.in);
	public static void main(String[] args) 
	{
        	test();
        	test();
        	test();
    	}
	
	public static void test() 
	{
        	System.out.print("Please enter one value: ");
		int n=keyboard.nextInt();		
		int result=1;	//用乘的，所以不能乘0
	
		if((n>0)&&(n<=10)) //1~10
		{
			for(int i=1;i<=n;i++)
			{
				result*=i;    //用乘的
			}
			System.out.printf("%d!: %d\n",n,result);	
		}
		else
		{
        	System.out.println("Error,the value is out of range.");		
		}
    	}
}
```
---
最後編輯時間:2021/4/17 8:57am.
###### tags: `JAVA課堂學習` `複習用` `高科大`