java - 设置数组大小并将用户输入的字符串解析到数组中

标签 java arrays split java.util.scanner

我需要将数组的大小设置为等于 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();
}

}

关于java - 设置数组大小并将用户输入的字符串解析到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60199930/

相关文章:

css - 在 SASS 中提取部分边界属性

java - 搜索文件 - Java - 需要升级

java - 单选按钮与右侧按钮和左侧文本对齐

javascript - 使用递归数组递归组件加载

php - 如何从关联数组中删除键及其值?

c# - 将字符串拆分为字符串数组而不丢失文本顺序

python - 根据限制从右开始用单词拆分字符串

java - GSON:在两个类中引用相同的对象,解码后实例重复

java - Mariadb 连接客户端 : Access denied for user (using password: NO) on mysql 8. 0

php - 如何使服务器 header 的输出更具可读性?