我的 java 编译器有一个奇怪的问题。我和我的 friend 一起制作了一个程序(他通过电子邮件向我发送了程序,问题是一样的)并且在他的电脑上运行在我的电脑上不运行。我试图在 stackoverflow 上找到所有可能的解决方案,我做了我阅读的所有内容,但似乎没有解决方案,我还重新安装了不同版本的 java,但没有运行。 问题如下:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1416)
at Geometriche.main(Geometriche.java:13)
程序如下:
import java.util.*;
import java.io.*;
public class Geometriche{
public static void main (String [] arg)throws Exception{
Scanner sc = new Scanner(System.in);
double area = 0,a = 0;
int x = sc.nextInt();
Figura F[] = new Figura[x];
sc.nextLine();
for(int i=0; i<x; i++){
while(sc.hasNextLine()){
char s = sc.next().charAt(0);
switch(s){
case 'r':
double b = sc.nextDouble();
double al = sc.nextDouble();
F[i] = new Rettangolo(b,al);
a = F[i].getArea();
break;
case 'c':
double raggio = sc.nextDouble();
F[i] = new Cerchio(raggio);
a = F[i].getArea();
break;
case 't':
double lato1 = sc.nextDouble();
double lato2 = sc.nextDouble();
double lato3 = sc.nextDouble();
F[i] = new Triangolo(lato1,lato2,lato3);
a = F[i].getArea();
break;
case 'q':
double l = sc.nextDouble();
F[i] = new Quadrato(l);
a = F[i].getArea();
break;
}
area = area + a;
}
}
System.out.println("La somma delle aree e': "+area);
}
}
还有 4 个不同的类代表 4 个不同的几何图形(矩形、圆形、三角形、正方形)和一个称为 figura 的抽象类。 请帮我在星期一做美容,我有一个非常重要的考试 马特奥
最佳答案
由于文件末尾的最后一个换行符,您的代码抛出异常。我用我用你提供的输入创建的文件尝试了你的代码,输出符合预期,没有抛出异常。我在文件末尾添加了一个换行符,如果我们逐个字符地查看它,我们会看到如下内容:
3\nt\n9\n12\n15\nc\n5\nq\n5\n
最后一个换行符是异常的原因,因为您也在 while(sc.hasNextLine())
上读取它,但它后面没有元素,因此 NoSuchElementException
,当我更改文件时抛出的。
你的 friend 设法让这个代码工作,因为他可能没有包括最后一个换行符(他在输入 5 后没有按 ENTER)。
解决方案是删除 while,因为您已经告诉 forloop 迭代多少次,并且在循环内告诉 Scanner 在每个条件下读取多少,所以您无论如何都没有理由拥有它。
下面的代码只会抛出一个 NoSuchElementException
如果你说你有很多数字并且没有在文件中描述它们(即放置 3 个数字并且只为其中的 2 个提供信息)。
public static void main (String [] arg) throws Exception {
String path = "C:\\folder\\myfile.txt";
Scanner sc = new Scanner(Paths.get(path), StandardCharsets.UTF_8.name());
double area = 0, a = 0;
int x = sc.nextInt();
Figura F[] = new Figura[x];
sc.nextLine();
for (int i = 0; i < x; i++) {
char s = sc.next().charAt(0);
switch (s) {
case 'r':
double b = sc.nextDouble();
double al = sc.nextDouble();
F[i] = new Rettangolo(b, al);
a = F[i].getArea();
break;
case 'c':
double raggio = sc.nextDouble();
F[i] = new Cerchio(raggio);
a = F[i].getArea();
break;
case 't':
double lato1 = sc.nextDouble();
double lato2 = sc.nextDouble();
double lato3 = sc.nextDouble();
F[i] = new Triangolo(lato1, lato2, lato3);
a = F[i].getArea();
break;
case 'q':
double l = sc.nextDouble();
F[i] = new Quadrato(l);
a = F[i].getArea();
break;
}
area = area + a;
}
System.out.println("La somma delle aree e': "+area);
}
关于java - 我怎样才能运行这个程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41768555/