是否可以在Java的扫描仪中访问扫描仪?

问题描述 投票:2回答:1

目标:我正在创建一个程序,该程序可以让我计算多种类型的图形的面积。为此,我想使用扫描仪读取用户输入并评估所提供的字符串是否等于我的图形名称之一。如果是这样,它将从具有另一个扫描仪的图形类中调用一个方法。

错误:输入图的名称将重定向到另一个类的扫描仪时,输入不匹配。这是错误->

    Forneça qual figura dentre estas você deseja calcular a área de: circunferência, triângulo, retângulo, quadrado, trapézio, paralelogramo.
circulo
Forneça o raio do círculo:
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at com.company.Circle.calculateCircleArea(Calculator.java:42)
    at com.company.Calculator.main(Calculator.java:14)

Process finished with exit code 1

这里是代码:

    package com.company;

import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Forneça qual figura dentre estas você deseja calcular a área de: circunferência, triângulo, retângulo, quadrado, trapézio, paralelogramo.");
        String equals = scanner.nextLine();

        if (equals.toLowerCase().equals("círculo") || equals.toLowerCase().equals("circulo")) {
            scanner.close();
            Circle.calculateCircleArea();
        } else if(equals.toLowerCase().equals("quadrado")) {
            scanner.close();
            Square.calculateSquareArea();
        } else if(equals.toLowerCase().equals("trapézio") || equals.toLowerCase().equals("trapezio")) {
            scanner.close();
            Trapezium.calculateTrapeziumArea();
        } else if(equals.toLowerCase().equals("paralelogramo") || equals.toLowerCase().equals("paralelograma")) {
            scanner.close();
            Parallelogram.calculateParallelogramArea();
        } else if(equals.toLowerCase().equals("retângulo") || equals.toLowerCase().equals("retangulo")) {
            scanner.close();
            Rectangle.calculateRectangleArea();
        } else if(equals.toLowerCase().equals("triangulo") || equals.toLowerCase().equals("triângulo")) {
            scanner.close();
            Triangle.calculateTriangleArea();
        } else {
            System.out.println("Figura inválida. Veja se foi escrita de forma correta e execute o programa novamente.");
            scanner.close();
        }
    }
}

class Circle {
    public static void calculateCircleArea() {
        Scanner circle = new Scanner(System.in);

        System.out.println("Forneça o raio do círculo:");
        double radius = circle.nextDouble();
        System.out.println("A area do círculo é: " + (Math.PI * Math.pow(radius, 2)));

        circle.nextLine();
        circle.close();
    }
}

class Square {
    public static void calculateSquareArea() {
        Scanner square = new Scanner(System.in);

        System.out.println("Forneça valor de um dos lados do quadrado:");
        double side = square.nextDouble();
        System.out.println("A area do quadrado é: " + Math.pow(side,2));

        square.nextLine();
        square.close();
    }
}

class Trapezium {
    public static void calculateTrapeziumArea() {
        Scanner trapezium = new Scanner(System.in);

        System.out.println("Forneça o valor da menor base do seu trapézio:");
        double smallBase = trapezium.nextDouble();
        System.out.println("Forneça o valor da maior base do seu trapézio:");
        double largeBase = trapezium.nextDouble();
        System.out.println("Forneça o valor da altura do seu trapézio:");
        double height = trapezium.nextDouble();
        System.out.println("A area de seu trapézio é: " + (((smallBase + largeBase) * height)/2));

        trapezium.nextLine();
        trapezium.close();
    }
}


class Parallelogram {
    public static void calculateParallelogramArea() {
        Scanner parallelogram = new Scanner(System.in);

        System.out.println("Forneça o valor da base do seu paralelogramo:");
        double base = parallelogram.nextDouble();
        System.out.println("Forneça o valor da altura do seu paralelogramo:");
        double height = parallelogram.nextDouble();
        System.out.println("A area do seu paralelogramo é: " + base * height);

        parallelogram.close();
    }
}

class Rectangle {
    public static void calculateRectangleArea() {
        Scanner rectangle = new Scanner(System.in);

        System.out.println("Forneça o valor do comprimento do seu retângulo:");
        double length = rectangle.nextDouble();
        System.out.println("Forneça o valor da altura do seu retângulo:");
        double height = rectangle.nextDouble();
        System.out.println("A area do seu retângulo é: " + length * height);

        rectangle.close();
    }
}

class Triangle {
    public static void calculateTriangleArea() {
        Scanner triangle = new Scanner(System.in);

        System.out.println("Forneça o valor da base de seu triângulo:");
        double base = triangle.nextDouble();
        System.out.println("Forneça o valor da altura do seu triângulo:");
        double height = triangle.nextDouble();
        System.out.println("O valor da area do seu triângulo é:" + (height * base) / 2);

        triangle.close();
    }
}

如果能得到一些帮助,我将非常感激。我仍然是学习编程的初学者。不胜感激!

编辑:代码的非必要部分,也就是响应和问题均使用葡萄牙语。对于错误,这里的意思是->输入您要计算的这些图形中的哪个区域:圆周,三角形,圆形,矩形,梯形等。我输入:圈子然后转到Circle类,并询问:输入圆的半径->但是在我不能按任何键之前,扫描仪已经关闭并且错误就位。

java string java.util.scanner
1个回答
0
投票

您应检查hasNextLine()方法是否输入扫描仪

if ( myScanner.hasNextLine() ) {
// do everything I want 
} 

检查this question [1]

© www.soinside.com 2019 - 2024. All rights reserved.