我制作了一个程序,要求输出3个整数的三角形。一切都运行并编译成功,但是,似乎它要求用户查看是否要再次循环它的部分,在线编译器输出错误:
线程“main”java.util.NoSuchElementException中的异常 at java.util.Scanner.throwFor(Scanner.java:838) 在java.util.Scanner.next(Scanner.java:1347) 在Assignment5.main(Assignment5.java:56)
import java.util.Scanner;
public class Assignment5 {
public static void main (String[]args)
{
for (int a = 0; a < Integer.MAX_VALUE; a++)
{
Scanner userInput = new Scanner(System.in);
Scanner answer = new Scanner(System.in);
int x,y,z;
System.out.println("Enter the sides of the triangle: ");
x = userInput.nextInt();
y = userInput.nextInt();
z = userInput.nextInt();
Tri isos = new Tri(x,y,z);
Tri equal = new Tri(x,y,z);
Tri scalene = new Tri(x,y,z);
// check the equilateral triangle
System.out.println(equal.toString() + " triangle:");
if (equal.is_isosceles())
System.out.println("\tIt is isosceles");
else
System.out.println("\tIt is not isosceles");
if (equal.is_equilateral())
System.out.println("\tIt is equilateral");
else
System.out.println("\tIt is not a equilateral");
if (equal.is_scalene())
System.out.println("\tIt is scalene");
else
System.out.println("\tIt is not scalene");
System.out.println("Would you like to enter values again? (y/n)" );
String input = answer.next(); //Exception is thrown from here
if (input.equals("y"))
{
System.out.println("ok");
}
else if(!input.equals("y"))
{
System.out.println("Ok, bye.");
break;
}
}
}
}
答案 0 :(得分:1)
由Enumeration的nextElement方法抛出以指示 枚举中没有更多元素。
您收到此异常是因为Scanner#next
没有读取新行字符,即按Enter键时的字符(\n
) ,所以在下一个for
迭代中,你试图读取它,这会导致异常。
一种可能的解决方案是在answer.nextLine()
之后立即添加answer.next()
,以便吞下这个额外的\n
。
您的代码示例:
Iteration (a) | input for scanner | Data for scanner
--------------+-----------------------+-------------------
0 | "Hello" (And enter) | Hello
1 | \n | PROBLEM!
答案 1 :(得分:0)
对我来说,似乎answer.next()实际上没有赋值给它 通常int name = answer.next()名称被分配给答案。我的意思是名称不能分配一个值,因为answer.next()没有。
至少这是我的理解。另一种方法是摆脱answer.next并使用另一台扫描仪。 实际上是对此的编辑。
扫描程序从文件或控制台读取。您已经有一台扫描仪(userInput),第二台扫描仪实际上并没有做任何事情,它是一台真正的扫描仪,它没有任何东西可读。 摆脱扫描仪的答案,替换是与int,String,double和拥有 int answer = userInput.nextInt(); 要么 double answer = userInput.nextDouble(); 要么 String answer = userInput.nextLine();
答案 2 :(得分:0)
正如您所说,代码为您运行,但在在线编译器上编译和执行时却没有。答案扫描仪已耗尽,因为它没有任何元素。
这很令人尴尬,但是我在编译我的代码时遇到了同样的错误,我发现我没有事先向输入部分提供输入,并期望在线编译器要求输入。
由于您使用两台扫描仪从控制台获取输入,因此请尝试使用scanner userInput从文件中获取输入。 (对于不同的在线编译器,它可能会有所不同,但是可以选择从文件中提供输入)