讓使用者輸入學生成績,範圍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) { //因為-1比0小,若使用者輸入-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; //傳回新陣列的地址 } }
再更新一版,因為上面兩種方式,會在輸入當前陣列的最後一格時,加倍陣列的長度,有可能浪費許多空間
因此,我更正了以下順序
原本:先判斷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; } }
全站熱搜
留言列表