为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2022-05-21 19:57:53
我被困在一个练习中,我应该接受一个单词和数字(由空格分隔),然后将它们放入一个 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));
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我认为您的逻辑应该是从扫描仪读取整个输入行。然后,进行完整性检查以确保它只有两个由空格分隔的术语。如果是这样,则将单词和数字分配给它们各自的数组。


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]));

}


查看完整回答
反对 回复 2022-05-21
?
Qyouu

TA贡献1786条经验 获得超11个赞

使用 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

如果您的所有输入都是一个字符串,然后是一个数字,这应该可以工作


查看完整回答
反对 回复 2022-05-21
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

ArrayLists 从索引 0 开始。因此,如果要输出 ArrayList 中的第一个 Item,则必须编写System.out.println(listNames.get(0));



查看完整回答
反对 回复 2022-05-21
  • 3 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号