讓使用者輸入學生成績,範圍0~100,輸入-1時結束程式

import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {
        //輸入學生成績,範圍0~100,輸入-1時結束程式
        Scanner sc = new Scanner(System.in);
        int student[] = new int[2];
        int count = 0;
        while (true) {
            if (count == student.length) {
                student = doubleArr(student);
            }
            int input;
            do {
                System.out.print("Enter " + (count + 1) + "th Grade");
                input = sc.nextInt();
                if (input == -1) {
                    break;
                }
            } while (input < 0 || input > 100);
            if (input == -1) {          //必須在break一次離開當前迴圈
                break;
            }
            student[count] = input;
            count++;
            System.out.println(student.length);
        }

    }
    
        public static int[] doubleArr(int arr[]) {
        int newArr[] = new int[arr.length * 2]; //將陣列長度放大兩倍
        for (int i = 0; i < arr.length; i++) {  //將原陣列的數值放入增倍的陣列
            newArr[i] = arr[i];
        }
        return newArr;  //傳回新陣列的地址
    }

}

上面的寫法沒有問題,只是有兩個break;看的不是很舒服,所以我們修改一下

import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {
        //輸入學生成績,範圍0~100,輸入-1時結束程式
        Scanner sc = new Scanner(System.in);
        int student[] = new int[2];
        int count = 0;
        while (true) {
            if (count == student.length) {
                student = doubleArr(student);
            }
            System.out.print("Enter " + (count + 1) + "th Grade");
            int input = sc.nextInt();
            if (input == -1) {      //因為-10小,若使用者輸入-1,結束迴圈
                break;
            }
            if (input < 0 || input > 100) {     //若使用者輸入的範圍超出0~100,不做下面的程序,直接進下一圈
                continue;
            }
            student[count] = input; //可與下面一行合併為student[count++] = input;
            count++;

        }
        for(int i = 0; i<count; i++) {
            System.out.println(student[i] + " ");
        }
    }

    public static int[] doubleArr(int arr[]) {
        int newArr[] = new int[arr.length * 2]; //將陣列長度放大兩倍
        for (int i = 0; i < arr.length; i++) {  //將原陣列的數值放入增倍的陣列
            newArr[i] = arr[i];
        }
        return newArr;  //傳回新陣列的地址
    }

}

 

再更新一版,因為上面兩種方式,會在輸入當前陣列的最後一格時,加倍陣列的長度,有可能浪費許多空間

image

因此,我更正了以下順序

原本:先判斷count是否已等於陣列長度 => 加開長度 => 判斷是否為-1 => 不是的話將輸入的值放入

更新:先判斷是否為-1 => 不是的話 再判斷count是否已等於陣列長度 => 加開長度 => 將輸入的值放入

將判斷-1與否,放置最前面,讓在輸入-1明明是要結束的情況,不再增加陣列的長度

import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int arr[] = new int[2];
        int count = 0;
        int input;
        while (true) {
            input = sc.nextInt();   //在迴圈一開始就做輸入
            if (input == -1) {      //判斷輸入的值 是不是-1(代表結束)
                break;
            }
            if (count == arr.length) {    //如果不是-1的話,再加開陣列的空間
                arr = doubleArr(arr);
            }
            if (input >= 0 && input <= 100) {
                arr[count++] = input;
            }

        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    public static int[] doubleArr(int arr[]) {
        int[] newArr = new int[arr.length * 2];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

}

 

陣列排序(由小到大)

public class MainClass {
    public static void main(String[] args) {
        int arr[] = {12, 5, 3, 87, 6, 2};
        for (int i = 0; i < arr.length; i++) {              //每一個數都要做檢查,執行 陣列長度次
            for (int n = 0; n < arr.length - i ; n++) {     //每一個數,逐一與右邊的每個數做比較,執行 陣列長度-index                 if (arr[i] > arr[i + n]) {      //只要比右邊的數大,兩者交換
                    change(arr, i, (i + n));
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    public static void change(int[] arr, int index1, int index2) {
        int tmp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = tmp;
    }

}

 

讓使用者自行輸入陣列,並排大小

import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {
        //輸入數字組成陣列
        Scanner sc = new Scanner(System.in);
        int input[] = new int[2];   //先創立一個小陣列
        int count = 0;  //count當作index
        while (true) {
            if (count == input.length) {    //count等於陣列大小時,就需要增長
                input = doubleArr(input);
            }
            int in = sc.nextInt();
            if (in == 0) break;     //當輸入0時就帶表輸入陣列結束
            input[count++] = in;
        }
        
        //列出輸入後的陣列
        for (int i = 0; i < input.length; i++) {
            System.out.print(input[i] + " ");
        }
        System.out.println();

        //排列輸入的陣列
        int arr[] = input;
        for (int i = 0; i < arr.length; i++) {
            for (int n = 0; n < arr.length - i; n++) {
                if (arr[i] > arr[i + n]) {
                    change(arr, i, (i + n));
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
public static int[] doubleArr(int[] arr) {
        int newArr[] = new int[arr.length * 2];
        for(int i = 0; i< arr.length; i++){
            newArr[i] = arr[i];
        }
        return newArr;
    }
}

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Lillian 的頭像
    Lillian

    安安的code日記

    Lillian 發表在 痞客邦 留言(0) 人氣()