被塞在“线程”主体中的异常“ java.util.NoSuchElementException [英] Stuck at "Exception in thread "main" java.util.NoSuchElementException
问题描述
主要代码是:
package interactiveTriangleWithAClass;
public class InteractiveTriangleProgramClass
{public static void main(String [] args)throws Exception
{IAclass nums = new IAclass();
双周长;
双面积;
explain();
nums.getNumbers();
circles = nums.calcPer();
area = nums.calcArea();
outputResults(nums,peripheral,area); }
public static void explain()
{System.out.println(此程序计算周长);
System.out.print(和三角形三角形的面积);
System.out.println(3个数字由用户输入。\\
+输出是3个数字,周长和面积。\
+使用单独的课程。\\
+Derek Michel编写的程序); }
public static void outputResults(IAclass nums,double area,double boundaries)throws Exception
{nums.getNumbers();
System.out.println();
System.out.println(周长是+周界);
System.out.print(和区域是+区域);
}
课程是:
package interactiveTriangleWithAClass;
import java.util。*;
public class IAclass {
private double num1,num2,num3;
public IAclass(){
num1 = num2 = num3 = 3;
}
public IAclass(double value1,double value2,double value3){
num1 = value1;
num2 = value2;
num3 = value3;
}
public void getNumbers()throws异常{
扫描仪控制台=新的扫描仪(System。in);
System.out.println(Enter the first side。);
num1 = console.nextDouble();
System.out.println(进入第二边);
num2 = console.nextDouble();
System.out.println(进入第三边);
num3 = console.nextDouble();
console.close();
while(num1 <= 0){
System.err.print(Error。Side one must be greater than 0.);
System.out.println(再次输入一个。);
num1 = console.nextDouble();
}
while(num2 <= 0){
System.err.print(Error。Side two must be than than 0.);
System.out.println(再次输入二号);
num2 = console.nextDouble();
}
while(num3 <= 0){
System.err.print(Error。Side three must be greater than 0.);
System.out.println(再次输入三号);
num3 = console.nextDouble();
}
if(num1 + num2< num3){
System.out.println(基于输入的三角形);
System.out.print(不可能创建);
System.exit(0);
}
if(num2 + num3< num1){
System.out.println(基于输入的三角形);
System.out.print(不可能创建);
System.exit(0);
}
if(num1 + num3< num2){
System.out.println(基于输入的三角形);
System.out.print(不可能创建);
System.exit(0);
}
}
public double calcPer(){
return(num1 + num2 + num3);
}
public double calcArea(){
double s;
s =(num1 + num2 + num3)/ 2;
return(Math.sqrt(s *(s - num1)*(s - num2)*(s - num3)));
}
public void outputNumbers(){
System.out.print(两边是+ num1 +,+ num2);
System.out.print(and+ num3);
}
}
控制台运行后读取此内容,输入:
线程main中的异常java.util.NoSuchElementException
在java.util.Scanner.throwFor(未知源)
在java.util.Scanner.next(未知源)
在java.util.Scanner.nextDouble(未知源)
在interactiveTriangleWithAClass.IAclass.getNumbers(IAclass.java: 48)
在interactiveTriangleWithAClass.InteractiveTriangleProgramClass.outputResults(InteractiveTriangleProgramClass.java:54)
在interactiveTriangleWithAClass.InteractiveTriangleProgramClass.main(InteractiveTriangleProgramClass.java:41)
尝试删除以下行:
code> console.close();
您无法从控制台
中读取你已经关闭了它。
你几乎肯定不应该明确地关闭你的 Scanner
:这样做会关闭 System.in
。关闭您尚未打开自己的流并不是一个好习惯,因为一些其他代码可能依赖流被打开,并且在不存在的情况下抛出异常。
调试这样一个问题 - 异常可能会因为这个原因潜在地被抛出来 - 是非常棘手的。
I wrote a program with a separate class but I keep getting the same error right after the user inputs the three sides.
The main code is:
package interactiveTriangleWithAClass;
public class InteractiveTriangleProgramClass
{ public static void main (String [] args) throws Exception
{ IAclass nums = new IAclass();
double perimeter;
double area;
explain();
nums.getNumbers();
perimeter = nums.calcPer();
area = nums.calcArea();
outputResults(nums, perimeter, area); }
public static void explain()
{ System.out.println("This program calculates the perimeter ");
System.out.print("and the area of 3 sides for a triangle. ");
System.out.println("The 3 numbers are entered by the user.\n"
+ "The output is the 3 numbers, the perimeter and the area.\n"
+ "A seperate class is used.\n"
+ "Program written by Derek Michel"); }
public static void outputResults(IAclass nums, double area, double perimeter) throws Exception
{ nums.getNumbers();
System.out.println();
System.out.println("The perimeter is " + perimeter);
System.out.print(" and the area is " + area); }
}
The class is:
package interactiveTriangleWithAClass;
import java.util.*;
public class IAclass {
private double num1, num2, num3;
public IAclass() {
num1 = num2 = num3 = 3;
}
public IAclass(double value1, double value2, double value3) {
num1 = value1;
num2 = value2;
num3 = value3;
}
public void getNumbers() throws Exception {
Scanner console = new Scanner(System. in );
System.out.println("Enter the first side.");
num1 = console.nextDouble();
System.out.println("Enter the second side.");
num2 = console.nextDouble();
System.out.println("Enter the third side.");
num3 = console.nextDouble();
console.close();
while (num1 <= 0) {
System.err.print("Error. Side one must be greater than 0.");
System.out.println("Enter side one again.");
num1 = console.nextDouble();
}
while (num2 <= 0) {
System.err.print("Error. Side two must be greater than 0.");
System.out.println("Enter side two again.");
num2 = console.nextDouble();
}
while (num3 <= 0) {
System.err.print("Error. Side three must be greater than 0.");
System.out.println("Enter side three again.");
num3 = console.nextDouble();
}
if (num1 + num2 < num3) {
System.out.println("Based on the sides inputed, your triangle ");
System.out.print("is impossible to create.");
System.exit(0);
}
if (num2 + num3 < num1) {
System.out.println("Based on the sides inputed, your triangle ");
System.out.print("is impossible to create.");
System.exit(0);
}
if (num1 + num3 < num2) {
System.out.println("Based on the sides inputed, your triangle ");
System.out.print("is impossible to create.");
System.exit(0);
}
}
public double calcPer() {
return (num1 + num2 + num3);
}
public double calcArea() {
double s;
s = (num1 + num2 + num3) / 2;
return (Math.sqrt(s * (s - num1) * (s - num2) * (s - num3)));
}
public void outputNumbers() {
System.out.print("The sides are " + num1 + ", " + num2);
System.out.print(" and" + num3);
}
}
The console reads this after running and after 3 sides are inputed:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at interactiveTriangleWithAClass.IAclass.getNumbers(IAclass.java:48)
at interactiveTriangleWithAClass.InteractiveTriangleProgramClass.outputResults(InteractiveTriangleProgramClass.java:54)
at interactiveTriangleWithAClass.InteractiveTriangleProgramClass.main(InteractiveTriangleProgramClass.java:41)
Try removing the following line:
console.close();
You can't read from console
once you've closed it.
You almost certainly shouldn't explicitly close your Scanner
: doing so will close System.in
. It is not a good practice to close a stream that you haven't opened yourself, since some other code may rely on the stream being open, and throw an exception when it isn't.
Debugging such a problem - where the exception is potentially thrown a long way from the cause - is very tricky.
这篇关于被塞在“线程”主体中的异常“ java.util.NoSuchElementException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!