java - 我怎样才能运行这个程序?

标签 java exception java.util.scanner

我的 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/

相关文章:

java - 使用超时异常时java中的计时器问题,代码在超时异常后无法正确运行

java - 将文件中的整数存储到数组中并查找平均 JAVA

java - 是否可以将 Eclipse 中的文件/文件夹标记为已生成?

java - Gson排除策略和自定义序列化

java - 代码中显然有一个无法访问的语句但可以编译 - 为什么?

postgresql - 我可以在 FOR 循环中使用 EXCEPTION 来强制继续出错吗?

java - 扫描仪导入显然有问题

java - Java中Int后无法输入String

java - 可转换为 Java 和 XSLT 的规则或脚本语言

java - 带 Bluez 卡盘的 BlueCove "Can not open SDP session. [2] No such file or directory"