課堂練習題


if...else練習

  • 關係判斷,讓使用者輸入兩數字x與y,判斷x、y的關係是相等、x大於y、x小於y
Scanner s=new Scanner(System.in);
System.out.print("請輸入x:");
int x=s.nextInt();
System.out.print("請輸入y:");
int y=s.nextInt();
if(x==y){
    System.out.println(x+"=="+y); 
}else if(x>y){
    System.out.println(x+">"+y);
}else{
    System.out.println(x+"<"+y);
}
-------------------------------
請輸入x:10
請輸入y:16
10<16

記得要看到 } 下括弧才可以打else,else不是在哪個位置都可以打,要小心注意

switch case練習

  • 指令要用何種運算 有10、13兩整數,請使用者輸入其中(+ - * / )其中一個運算子,將運算結果輸出給使用者
//PURPOSE:輸入運算子,將兩數值進行運算
Scanner s=new Scanner(System.in);
int x=10;
int y=13;
System.out.print("請輸入+ - * /其中一個運算子:");
String operator=s.next();
switch(operator){
    case "+":
        System.out.println(x+"+"+y+"="+(x+y));
        break;
    case "-":
        System.out.println(x+"-"+y+"="+(x-y));
        break;
    case "*":
        System.out.println(x+"*"+y+"="+(x*y));
        break;
    case "/":
        System.out.println(x+"/"+y+"="+(x/y));
        break;
    default:
        System.out.println("你輸入了錯誤的運算子");
        break;
}
------------------------------
請輸入+ - * /其中一個運算子:+
10+13=27

( + - * / )輸入的型態可以選擇用string不能選擇用int

case 的部份旁邊擺的是(operator)的,由於他是string,所以下方都要用" "刮起來

default跟break又被遺忘了,絕對要注意不能遺忘他們兩個

迴圈

  • 求出30以下所有5的倍數
//PURPOSE:求出30以下所有5的倍數
for(int i=1;i<=30;i++){
    if(i%5==0){
        System.out.print(i+" ");
    }
}
  • 給長寬排出圖形

    下面範例為 長=4 寬=2

//PURPOSE:給長寬,排出圖形
Scanner s=new Scanner(System.in);
System.out.print("請輸入圖形的長:");
int length=s.nextInt();
System.out.print("請輸入圖形的寬:");
int width=s.nextInt();

for(int i=1;i<=width;i++){
    for(int j=1;j<=length;j++){
        System.out.print("#");
    }
    System.out.println("");
}
------------------------------------
請輸入圖形的長:4
請輸入圖形的寬:2
####
####
先想的想出是兩層for迴圈再繼續
  • 排出底為5顆*的三角形
//PURPOSE:排出底為5的三角形
int n=5;
for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        System.out.print("*");
    }
    System.out.println("");
}
--------------------
*
**
***
****
*****

進階題: 請用迴圈排出以下三角形

1
22
333
4444
55555
  • 排出底為n的三角形圖案
//PURPOSE:排出底為N的三角形圖案
final int N=7;
for(int i=N/2;i>=0;i--){
    for(int j=1;j<=N;j++){
        if((j>i)&&(j<=N-i)){
            System.out.print("*");
        }else{
            System.out.print(" ");
        }
    }
    System.out.println();
}
-------------------------------
   *
  ***
 *****
*******
  • 進階題:排出菱形圖案
   *   
  ***  
 ***** 
*******
 *****
  ***
   *
  • 列出所有小於100的質數
boolean IsPrime=true; //一定要給初值,不然下面做if判斷有可能會判斷到空值
for(int i=2;i<=100;i++){
    for(int j=2;j<=Math.sqrt(i);j++){//若不是質數,會被小於自己開根號的數給整除
        if(i%j==0){//若可以整除
            IsPrime=false;
            break;
        }
    }
    if(IsPrime){
        System.out.println(i);
    }else{
        IsPrime=true;//這行非常重要!!!請一定要加這行
    }
}

此題直接聯想的話,可以很簡單聯想到,一個質數就是不會被比它小的數值整除,用這個方式撰寫是最直觀的。

//若不用數學公式來計算此題
for(int i=2;i<=100;i++){
    for(int j=2;j<i;j++){
        .....    
    }
}

但為了程式效率考量,我們使用數學公式,才可以大幅降低程式執行時間

if(i%j==0){//若可以整除
    IsPrime=false;
    break;
}

此行有無加上break將會大幅度影響程式執行速度,初學者往往會少寫了break這一行。

一個數只要發現一個可以整除它的因數,它就100%不是質數了,所以我們到這裡就可以直接換跑下一個數值了。

results matching ""

    No results matching ""