我被困在一个练习中,我应该拿一个单词和数字(用空格分隔),然后将它们放在一个数组列表中(数字和名称的不同列表)。
例如,如果我写"Jordan 19",那么名称Jordan应该放在名为"listNames"的ArrayList中,数字19应该放在名为"listNumbers"的ArrayList中。
如果键入了字母"q",则应断开while循环。我遇到的问题是,当我尝试从 ArrayList 中获取名称和编号时,我只得到一个空行和输入的数字。即数字的数组列表有效,但名称无效。
可能出了什么问题?感谢您的帮助!
ArrayList<String> listNames = new ArrayList<String>();
ArrayList<Integer> listNumbers = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
System.out.println("Write a name and number (separate with blankspace), end with 'q'");
boolean go = true;
while (go) {
String full = in.nextLine();
if (in.next().equals("q")) {
go = false;
}
int len = full.length();
int blank = full.indexOf(" ");
String nameString = full.substring(0, blank);
String numberString = full.substring(blank + 1, len);
int number = Integer.parseInt(numberString);
listNames.add(nameString);
listNumbers.add(number);
}
System.out.println(listNames.get(1));
System.out.println(listNumbers.get(1));
我认为您的逻辑应该是从扫描仪读取整个输入行。 然后,执行健全性检查以确保它只有两个用空格分隔的术语。 如果是这样,则将单词和数字分配给它们各自的数组。
System.out.println("Write a name and number (separate with blankspace), end with 'q'");
while (true) {
String full = in.nextLine();
if ("q".equals(full)) {
break;
}
String[] parts = full.split("\s+");
if (parts.length != 2) {
// you could also just break here as well, but throwing an exception
// is something you might actually do in a production code base
throw new IllegalArgumentException("Wrong number of input terms; use 2 only");
}
listNames.add(parts[0]);
listNumbers.add(Integer.parseInt(parts[1]));
}
您可以拆分然后输入并将第一个和第二个成员插入到相应的数组列表中。您也不需要布尔go
。
ArrayList<String> listNames = new ArrayList<>();
ArrayList<Integer> listNumbers = new ArrayList<>();
Scanner in = new Scanner(System.in);
System.out.println("Write a name and number (separate with blankspace), end with 'q'");
while(true){
String full = in.nextLine();
if(full.equals("q")){
break;
}
String[] data = full.split(" ");
listNames.add(data[0]);
listNumbers.add(Integer.parseInt(data[1]));
}
System.out.println("Names and numbers entered:");
for(int i = 0; i < listNames.size(); i++){
System.out.println(listNames.get(i) + " " + listNumbers.get(i));
}
ArrayLists从索引0开始。因此,如果你想输出 ArrayList 中的第一个项目,你必须编写System.out.println(listNames.get(0));
<</p>
不要让这变得复杂。 输入输入为"Jordan 19",并删除输入中的 q。
并使用字符串split()
将其分隔
String [] inputString = full.split(" ");
listNames.add(inputString [0]);
listNumbers.add(Integer.parseInt(inputString [1]));
使用 String.split() 函数会更容易得到你想要的东西。
如前所述,输入由空格分隔。假设输入是"Jordan 19",那么您可以使用如下所示的内容:
String [] data = full.split(" "); //split the input by a blank space
listNames.add(data[0]); //data[0] = Jordan
listNumbers.add(Integer.parseInt(data[1])); //data[1] = 19
如果您的所有输入都是字符串,然后后跟一个数字,这应该有效
这里的所有答案都暗示了同样的事情,而且它有效。一个小小的补充是,
这样做:listNumbers.add(Integer.valueOf(data[1]));
取而代之的是:listNumbers.add(Integer.parseInt(data[1]));
.
Integer.parseInt()
返回一个int
,并且您正在存储Integer
的列表。编译器正在为您自动装箱结果。您可以通过Integer.valueOf()
来避免这种情况。