我被困在一个练习中,我应该把一个单词和一个数字(用空格隔开),然后将它们放在一个ArrayList(数字和名称的不同列表)中。
例如,如果我写“ Jordan 19”,则将Jordan名称放在名为“ listNames”的ArrayList中,将数字19放在名为“ listNumbers”的ArrayList中。
如果键入字母“ q”,则应中断while循环。 我遇到的问题是,当我尝试从ArrayList中获取名称和数字时,我只得到一个空白行和输入的数字。也就是说,用于数字的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));
答案 0 :(得分:0)
使用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
如果您所有的输入都是字符串,然后是数字,则此方法应该有效
答案 1 :(得分:0)
我认为您的逻辑应该是从扫描仪读取整个输入行。然后,进行完整性检查,以确保它只有两个用空格隔开的术语。如果是这样,则将单词和数字分配给它们各自的数组。
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]));
}
答案 2 :(得分:0)
您可以先拆分然后输入,然后将第一个和第二个成员插入相应的arrayslists。您也不需要布尔值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));
}
答案 3 :(得分:0)
不要让这个变得复杂。 输入“ Jordan 19 ”作为输入,并删除输入中的 q 。
并使用字符串的split()
分隔
String [] inputString = full.split(" ");
listNames.add(inputString [0]);
listNumbers.add(Integer.parseInt(inputString [1]));
答案 4 :(得分:0)
ArrayLists从索引0开始。因此,如果要输出ArrayList中的第一个项目,则必须编写System.out.println(listNames.get(0));
答案 5 :(得分:0)
这里的所有答案都暗示着同一件事,并且行之有效。
执行此操作:listNumbers.add(Integer.valueOf(data[1]));
代替此:listNumbers.add(Integer.parseInt(data[1]));
。
Integer.parseInt()
返回一个int
,并且您正在存储Integer
的列表。编译器会为您自动装箱结果。您可以使用Integer.valueOf()
避免这种情况。