请查看以下代码。我试图按升序管理给定的数字。
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);
}
}
将输入插入为2,1,6,7,3
点击进入。
现在,扫描仪没有退出while循环,因为它没有提供任何输出。我在这做错了什么?即使你设法得到它,输出也被括号包围,如“[1] [2] [3]”。这是为什么?那是因为我没有调用'Integer.parseInt()'吗?请帮我解决这两个问题。
感谢。
答案 0 :(得分:4)
按Enter键的结果将是一个行分隔符,其字符被视为分隔符(默认情况下,请参阅Character.isWhitespace())并被跳过。因此Scanner
正在等待进一步的输入,这些输入永远不会到来,hasNextInt()
将阻止。输入非整数的东西,例如.
,以使循环终止:
1 2 5 3 7。
答案 1 :(得分:1)
这个循环永远不会退出(只要你输入整数),因为没有break
条件
while(scan.hasNextInt()){
numbers.add(scan.nextInt());
}
如果你想让你的循环停止,比如说你需要只获得5个整数,那么你可以这样做:
while(scan.hasNextInt()){
numbers.add(scan.nextInt());
if(numbers.size() == 5) break;
}
答案 2 :(得分:1)
扫描仪继续扫描,直到输入结束,或者直到它无法读取(例如,当文本中检测到非整数时)。
按Enter键后按ctrl + D. 您可以将数字分隔为任何空格。
答案 3 :(得分:1)
如果您希望仅在2,1,6,7,3
这一行上输入,则可能更容易使用扫描仪的nextLine()
:
Scanner scan = new Scanner(System.in);
String consoleInput = scan.nextLine();
一旦您按Enter键,这将终止扫描仪。此时,您在String中输入,您必须解析该字符串并输出所有数字。
另请注意,您忘记了参数化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);
}
}
}
答案 4 :(得分:0)
您的代码应该有效。你只需要添加一种方法来摆脱循环。最好将扫描值保存在局部变量中,以备再次引用时使用。
可能会添加:
while(scan.hasNextInt()){
int i=scan.nextInt();
if(i==-1)
break;
numbers.add(i);
}