设置数组大小并将用户输入的字符串解析为数组

Set Array size and parse out String user input into Array

我需要将数组的大小设置为等于 numberResponses,这样无论用户输入多少数字,无论他们列出多少部电影,数组都将是该大小。我知道我可以用 String[] favMoviesArray = new String(numberResponses); 声明数组但是我不确定如何将用户的响应拆分为数组的不同索引。

import java.util.Scanner;
import java.util.Arrays;

public class Assignment3 {

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

        System.out.println("Your favorite movies:");
        System.out.println("How many favorite movies do you have?");

        String numberResponsesStr = userInput.nextLine();
        int numberResponses;
            try{
                numberResponses = Integer.parseInt(numberResponsesStr);
            }
            catch(Exception e){
                System.out.println("Invalid input. Please enter a number.");
                return;
            }

        if(numberResponses < 1){
            System.out.println("Invalid input. Please enter a positive number.");
            return;
        }

        System.out.printf("List your %d favorite movies. Separate them with commas (Movie1, Movie2, Movie3, etc.).", numberResponses);      
        String favMovies = userInput.nextLine();
        System.out.println();        
        String[] favMoviesArray = favMovies.split("\s*,\s*");     
        Arrays.sort(favMoviesArray);

        System.out.printf("Your %d favorite movies are: %n", numberResponses);
        System.out.println(Arrays.toString(favMoviesArray));

        userInput.close();      
    }

}```

你的想法行得通。您可以将初始数组声明为用户指定的长度。然后你需要从分裂数组中转移进去,元素不能超过它能容纳的,也不能超过分裂出来的。 Math.min 做得很好,我做了一个循环来进行复制。 如果用户指定更多,则只使用适合的;我选择了第一个输入的,但如果你更喜欢按字母顺序排列第一个,这样更容易,也更容易排序。如果更少,则用 ZZZ 条目填充数组(排序到末尾)。 这是结果:

import java.util.Scanner;
import java.util.Arrays;

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

    System.out.println("Your favorite movies:");
    System.out.println("How many favorite movies do you have?");

    String numberResponsesStr = userInput.nextLine();
    int numberResponses;
    try {
        numberResponses = Integer.parseInt(numberResponsesStr);
    } catch (Exception e) {
        System.out.println("Invalid input. Please enter a number.");
        return;
    }

    if (numberResponses < 1) {
        System.out.println("Invalid input. Please enter a positive number.");
        return;
    }

    String[] theUltimateArray = new String[numberResponses]; //just like you thought
    for (int i = 0; i < numberResponses; i++) {
        theUltimateArray[i] = "ZZZ"; //start ZZZ, not null, to avoid ugliness and bad sorts, and so these are at the end with this sentinel value
    }

    System.out.printf("List your %d favorite movies. Separate them with commas (Movie1, Movie2, Movie3, etc.).", numberResponses);
    String favMovies = userInput.nextLine();
    System.out.println();
    String[] favMoviesArray = favMovies.split("\s*,\s*");
    //Arrays.sort(favMoviesArray); don't sort yet, want the first ones entered, not first alphabetically

    System.out.printf("Your %d favorite movies are: %n", numberResponses);
    //System.out.println(Arrays.toString(favMoviesArray));

    int n = Math.min(numberResponses, favMoviesArray.length); //number we can copy
    for (int i = 0; i < n; i++) { //copy
        theUltimateArray[i] = favMoviesArray[i];
    }
    Arrays.sort(theUltimateArray);
    System.out.println(Arrays.toString(theUltimateArray)); //never larger than they said. Filled at end

    userInput.close();
}

}