【问题标题】:Adding unknown number of numbers to arraylist将未知数量的数字添加到arraylist
【发布时间】:2015-01-28 07:13:32
【问题描述】:

我正在尝试在 Java 中创建一个插入排序算法,我希望它能够读取用户输入,并且他/她可以输入他们想要的任意数量的数字(我们现在会说它们都是整数,但是从长远来看,能够同时处理整数和双精度/浮点数会很好),我希望算法将它们全部排序。我的问题是,当我运行此代码以查看整数是否正确添加时,我的循环永远不会停止。

public class InsertionSort {
public static void main(String[] args){
    System.out.println("Enter the numbers to be sorted now: ");
    ArrayList<Integer> unsortNums = new ArrayList<Integer>();
    Scanner usrIn = new Scanner(System.in);

    while(usrIn.hasNextInt()) {
        unsortNums.add(usrIn.nextInt());
        System.out.println(unsortNums);    //TODO: Doesn't stop here
    }
    sortNums(unsortNums);
  }
}

现在,我怀疑它与扫描仪执行 .hasNextInt() 的方式有关,但我终其一生都无法弄清楚为什么它没有停止。这可能是IDE特定的东西吗?我正在使用 Intellij Idea。

如果我遗漏了任何需要包含的内容,请告诉我。

【问题讨论】:

  • 这个问题与IDE本身无关,所以我删除了那个标签。
  • 您提供的哪些输入有问题?阅读扫描仪文档——nextInt() 可能会阻塞等待输入。您希望如何跳出循环?
  • 你测试这个的输入是什么?
  • Scanner.hasNextInt() 等到用户点击回车并检查输入是否为整数类型。当用户输入其他内容时,例如“完成”,Scanner.hasNextInt() 返回 false 并退出循环。所以给用户一个提示,在完成他的整数列表后该做什么。
  • 诚,没关系,只是为了安全起见添加了它。 Barq,我刚试过“1 2 3 4”,显然没有引号。

标签: java insertion-sort


【解决方案1】:

只要您停止向输入流添加数字,您的代码就会停止。 nextInt() 正在寻找另一个整数值,如果找不到,它将停止循环。

试一试 - 输入任何不能被解释为 int 的字符序列,你的循环就会停止。

作为一个例子,这个序列将停止迭代:1 2 3 4 5 6 7 8 9 7/。原因是7/不能被读取为int,所以hasNextInt的条件不成立。

【讨论】:

  • 我想知道:我是否可以使用分隔符(例如逗号)来分隔数字并让扫描仪检查所有逗号,因此,如果输入的数字类似于 1、2、3, 4 它会添加数字并在停止看到逗号时停止?
  • 何必呢?添加更友好的消息,例如“输入单个句点或完成输入数字后的单词停止”更直接,不需要对实际阅读逻辑进行任何修改。
  • 好的,我明白你的意思了。我想我会那样做。谢谢!
【解决方案2】:

System.in 上使用扫描仪时,它只会阻塞并等待用户的下一个输入。一种常见的处理方式是告诉用户某个幻数,例如-999,将停止输入循环:

System.out.println("Enter the numbers to be sorted now (-999 to stop): ");
List<Integer> unsortNums = new ArrayList<Integer>();
Scanner usrIn = new Scanner(System.in);

int i = usrIn.nextInt();
while(i != -999) {
    unsortNums.add(i);
    i = usrIn.nextInt();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多