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