在while循环中将字符串和整数添加到不同的ArrayList

时间:2019-01-25 09:25:32

标签: java arraylist while-loop

我被困在一个练习中,我应该把一个单词和一个数字(用空格隔开),然后将它们放在一个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));

6 个答案:

答案 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()避免这种情况。