Java 扫描仪没有停止

Java 扫描仪没有停止,java,collections,io,arraylist,Java,Collections,Io,Arraylist,请看一下下面的代码。我试图按升序管理给定的数字 import java.io.*; import java.util.*; import java.util.ArrayList; public class TurboSort { public static void main(String[]args) { List<Integer> numbers = new ArrayList(); Scanner scan =

请看一下下面的代码。我试图按升序管理给定的数字

import java.io.*;
import java.util.*;
import java.util.ArrayList;

public class TurboSort
{
    public static void main(String[]args)
    {

        List<Integer> numbers = new ArrayList();        
        Scanner scan = new Scanner(System.in);

        while(scan.hasNextInt())
        {
            numbers.add(scan.nextInt());
        }


        Collections.sort(numbers);

        System.out.println(numbers);
    }
}
import java.io.*;
导入java.util.*;
导入java.util.ArrayList;
公共级涡轮排序
{
公共静态void main(字符串[]args)
{
列表编号=新的ArrayList();
扫描仪扫描=新扫描仪(System.in);
while(scan.hasNextInt())
{
add(scan.nextInt());
}
集合。排序(编号);
系统输出打印项次(数字);
}
}
输入为2,1,6,7,3

按回车键

现在,扫描仪没有退出while循环,因为它没有给出任何输出。我做错了什么?即使您成功地获得了它,输出也被诸如“[1][2][3]”之类的括号包围。为什么呢?这是因为我没有调用“Integer.parseInt()”?。请帮我回答这两个问题


谢谢。

按enter键的结果将是一个行分隔符,其字符将被视为分隔符(默认情况下,请参见)并被跳过。因此,
扫描器
正在等待进一步的输入,该输入永远不会到达,
hasnetint()
将被阻止。输入非整数的内容,例如
,以使循环终止:

1 2 5 3 7

此循环将永远不会退出(只要输入整数),因为不存在
中断
条件

while(scan.hasNextInt()){
  numbers.add(scan.nextInt());
}
如果希望循环停止,例如只需获取5个整数,则可以执行以下操作:

while(scan.hasNextInt()){
  numbers.add(scan.nextInt());
  if(numbers.size() == 5) break;
}

你的代码应该可以工作。您只需要添加一种打破循环的方法。最好将扫描的值保存在局部变量中,以防再次引用

或许可以加上:

while(scan.hasNextInt()){
    int i=scan.nextInt();
        if(i==-1)
            break;

    numbers.add(i);
}

扫描仪将继续扫描,直到输入结束或无法读取为止(例如,在文本中检测到非整数)

在按enter键后按ctrl+D键。
您可以在任何空白处分隔数字。

如果您只想在一行上输入,如
2,1,6,7,3
,可能更容易使用扫描仪的
nextLine()

Scanner scan = new Scanner(System.in);
String consoleInput = scan.nextLine();
一旦您点击回车键,这将终止扫描仪。在这一点上,您有一个字符串中的输入,您必须解析该字符串并得到所有的数字

还要注意,您忘记了参数化ArrayList()

以下是对源代码的可能修改:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);

    String consoleInput = scan.nextLine();

    List<Integer> numbers = new ArrayList<Integer>();


    if (consoleInput.length() > 0 && consoleInput.contains(",")) {

      String[] numbersAsStrings = consoleInput.split(",");

      for (String tNumberAsString : numbersAsStrings) {
        try {
          int tNumber = Integer.parseInt(tNumberAsString);

          numbers.add(tNumber);

        } catch (NumberFormatException nfe) {
          System.out.println(tNumberAsString + " is not a number");
        }
      }

      Collections.sort(numbers);

      System.out.println(numbers);

    } else {
      System.out.println("Nothing to sort!");
      System.out.println(numbers);
    }

  }
}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串consoleInput=scan.nextLine();
列表编号=新的ArrayList();
if(consoleInput.length()>0&&consoleInput.contains(“,”)){
字符串[]numbersAsStrings=consoleInput.split(“,”);
for(字符串tnumberassString:numberassString){
试一试{
int tNumber=Integer.parseInt(tNumberAsString);
编号。添加(t编号);
}捕获(NumberFormatException nfe){
System.out.println(tNumberAsString+“不是数字”);
}
}
集合。排序(编号);
系统输出打印项次(数字);
}否则{
System.out.println(“无需排序!”);
系统输出打印项次(数字);
}
}
}

这不是真的,循环将在您输入非int符号时停止。@hovanessyan Right,谢谢您的指针。我更新了我的answer@hovanessyan该代码有效,这只是结束循环的条件的另一个示例感谢您的回复。我很感激。:)我其实是想解决这个问题,但我放弃了那个网站;Java人员非常少,因为由于时间限制,他们的大部分挑战无法用Java完成。不管怎样,对C语言的人来说很好。如果“scan.hasnetint()”条件失败,循环将结束-如建议的那样-输入“exit”或“.”。@Honanesyan是的,它会的,我只是尝试展示另一种方法(使其更明确)。是的,代码会工作,但我认为关键是让用户输入他们喜欢的数字。(我说的是数字。大小()==5是,除了-1。这只是一个打破循环的另一种方法的示例……我假设这是一个家庭作业问题,而且此人是Java新手。记住这一点,最好看到其他方法。例如,如果此人需要包含字符串,则如果他们试图输入一个非字符串。