将所有输入添加到数组中

Adding all inputs into an array

预期功能:用户应该输入 1,2 或 3。1 应该允许用户向数组添加一个数字,2 应该允许用户访问数组中该点的数字,3 应该退出程序。

问题:当用户被要求输入一个数字并选择 'yes' 添加另一个数字时,只有最后输入的数字被添加到数组中。应添加所有输入的数字。为什么只加了最后一个?

import java.util.Scanner;

public class PhoneBookV2 {
    public static void main(String[] args){
        String[] numbers = {};
        String[] moreNumbers = new String[numbers.length + 1];

        numbers = moreNumbers;

        print(numbers);
        task(numbers, moreNumbers);
    }

    public static void task(String[] numbers, String[] moreNumbers){
        Scanner scan = new Scanner(System.in);

        System.out.println("Please Pick A Task: \n 1:Add A Number to Speed Dial \n 2:Speed Dial A Number \n 3:Exit");
        String choice = scan.nextLine();

        switch(choice){
            case "1":
                AddNumber(numbers , moreNumbers);
                break;
            case "2":
                CallNumber(numbers);
                break;
            case "3":
                System.out.println("Goodbye!");
                System.exit(0);
                break;
        }
    }

    private static String[] AddNumber(String[] numbers,String[] moreNumbers) {
        Scanner scanner = new Scanner(System.in);
        boolean cont = false;

        do{
            System.out.print("Please Enter The Number You Wish To Save Under Speed Dial: ");
            moreNumbers[moreNumbers.length - 1] = scanner.nextLine();



            System.out.print("Would you like to add another? Yes or No: ");
            String answer = scanner.nextLine().toLowerCase();
            if(answer.equals("yes")) continue;
            else if(answer.equals("no")) {
                print(numbers);
                cont = true;
            }

        }while(!cont);
        System.arraycopy(numbers, 0, moreNumbers, 0, numbers.length);
        return moreNumbers;
    }
    public static void printPhoneBook(String[][] keys){

        for(String[] row : keys){
            for(String s : row){
                System.out.print(s);
            }
            System.out.println();
        }
    }

    public static void print(String[] numbers){
        for(int i = 0; i< numbers.length; i++){
            System.out.println((i+1) + ") " + numbers[i]);
        }

    }

}

那是因为 Java 中的数组是固定大小的。让我们看看您的代码:

String[] numbers = {};
String[] moreNumbers = new String[numbers.length + 1];

您正在创建一个长度为 0 的字符串数组 numbers 和另一个长度为 numbers 的字符串数组 moreNumbers 添加到 1(例如,长度 1)。

然后,将这些数组传递给 task 方法,在该方法中向 moreNumbers 数组添加一个数字。

moreNumbers[moreNumbers.length - 1] = scanner.nextLine();

在这里,您将值 (scanner.nextLine()) 设置为 moreNumbers 的索引 0(因为 moreNumbers 的长度为 1)。当你获取另一个值时,它被设置为相同的索引 0,因为 moreNumbers 没有改变它的大小。

可以使用ArrayListadd方法,可以调整大小:

import java.util.ArrayList;

// ...

private static ArrayList<String> AddNumber() {
    // Create a new ArrayList to store the numbers
    final ArrayList<String> numbers = new ArrayList<>();

    Scanner scanner = new Scanner(System.in);
    boolean cont = false;

    do {
        System.out.print("Please Enter The Number You Wish To Save Under Speed Dial: ");
        
        // Add the next number to the ArrayList
        numbers.add(scanner.nextLine());

        System.out.print("Would you like to add another? Yes or No: ");
        String answer = scanner.nextLine().toLowerCase();
        if (answer.equals("yes")) continue;
        if (answer.equals("no")) {
            print(numbers);
            cont = true;
        }

    } while (!cont);
    return numbers;
}