首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 根據用戶輸入長度動態創建陣列並填充內容

     編輯:程式設計疑難解答

Java 中陣列長度必須在創建時確定,但可透過 Scanner 讀取用戶輸入的長度,動態 new 陣列,再逐項讀取內容。本文提供完整可執行範例,並說明進階替代方案 ArrayList。

基礎版:固定長度陣列 String[]

import java.util.Scanner;

public class ArrayInputDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 1. 讀取陣列長度
        System.out.print("請輸入陣列長度:");
        int length;
        try {
            length = scanner.nextInt();
            if (length <= 0) {
                System.out.println("長度必須大於 0");
                return;
            }
        } catch (Exception e) {
            System.out.println("請輸入有效整數");
            return;
        }
        scanner.nextLine(); // 吞掉換行符,避免影響後續 nextLine()

        // 2. 動態創建陣列
        String[] arr = new String[length];

        // 3. 逐項讀取內容
        System.out.println("請輸入 " + length + " 個元素 (每行一個,或空格分隔):");
        for (int i = 0; i < length; i++) {
            // next() 讀取下一個 token (以空白分隔)
            // 若需整行含空格,改用 nextLine()
            arr[i] = scanner.next();
        }

        // 4. 輸出驗證
        System.out.print("陣列內容:");
        for (String s : arr) {
            System.out.print(s + "\t");
        }
        System.out.println();

        scanner.close();
    }
}

執行範例

請輸入陣列長度:3
請輸入 3 個元素 (每行一個,或空格分隔):
apple
banana
cherry
陣列內容:apple    banana  cherry

關鍵點提醒

  • scanner.nextInt() 後必須 scanner.nextLine() 清除殘留換行,否則第一次 nextLine() 會讀到空字串。
  • next() 以空白 (空格、Tab、換行) 分隔;nextLine() 讀整行。按需選擇。
  • 輸入非整數時 nextInt() 拋 InputMismatchException,建議用 hasNextInt() 預檢或 try-catch。

進階版:使用 ArrayList (長度可變、功能豐富)

若不想預先指定長度,或需頻繁增刪,ArrayList 更適合:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ArrayListInputDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List list = new ArrayList<>();

        System.out.println("請輸入元素 (輸入 'end' 結束):");
        while (scanner.hasNext()) {
            String input = scanner.next();
            if ("end".equalsIgnoreCase(input)) break;
            list.add(input);
        }

        System.out.println("共輸入 " + list.size() + " 個元素:");
        for (String s : list) System.out.print(s + " ");
        // 若後續 API 需陣列:
        String[] arr = list.toArray(new String[0]);
    }
}

二維陣列/矩陣輸入擴展

若需輸入矩陣 (如題目提到的排列組合矩陣),先讀行列數,再雙層迴圈:

int rows = scanner.nextInt();
int cols = scanner.nextInt();
int[][] matrix = new int[rows][cols];
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        matrix[i][j] = scanner.nextInt();
    }
}

總結

  • 動態創建陣列核心:int n = scanner.nextInt(); Type[] arr = new Type[n];
  • 生產代碼建議加入輸入驗證、異常處理、資源關閉 (try-with-resources 或 finally)。
  • 現代 Java 開發優先考慮 List/ArrayList,僅在需與傳統 API 互操或極度在意記憶體佈局時用陣列。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved