java - 设置数组大小并将字符串用户输入解析为数组
问题描述
我需要将数组的大小设置为等于 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();
}
}
推荐阅读
- python - 从函数返回唯一的数据框名称
- xml - 为什么我的设计选项卡在 android studio 中是空白的?
- r - 在表格中更改栏的颜色和方向
- java - List的Java反射数组
- javascript - 如何使用 Firefox 禁用对特定 javascript 函数的访问?
- python - Pandas / Databricks - 如果另一个日期时间列在分钟内有 x,则创建一个新的日期时间列
- r - 更改主题后,ggpairs 中的自定义图例消失
- c++ - 如何在 CObservation2DRangeScan 中设置扫描角度?
- matlab - 是否可以在 uiaxes 上绘制轮廓图?
- php - Base64_decode 到 PDF