在Java中无法访问嵌套扫描器中的扫描器吗?

huangapple 未分类评论49阅读模式
英文:

Is it not possible to access a scanner within a scanner in Java?

问题

以下是您要翻译的内容:

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("Provide the name of the figure you want to calculate the area of: circle, triangle, rectangle, square, trapezium, parallelogram.");
        String input = scanner.nextLine();

        if (input.equalsIgnoreCase("circle")) {
            scanner.close();
            Circle.calculateCircleArea();
        } else if (input.equalsIgnoreCase("square")) {
            scanner.close();
            Square.calculateSquareArea();
        } else if (input.equalsIgnoreCase("trapezium")) {
            scanner.close();
            Trapezium.calculateTrapeziumArea();
        } else if (input.equalsIgnoreCase("parallelogram")) {
            scanner.close();
            Parallelogram.calculateParallelogramArea();
        } else if (input.equalsIgnoreCase("rectangle")) {
            scanner.close();
            Rectangle.calculateRectangleArea();
        } else if (input.equalsIgnoreCase("triangle")) {
            scanner.close();
            Triangle.calculateTriangleArea();
        } else {
            System.out.println("Invalid figure. Make sure it's spelled correctly and run the program again.");
            scanner.close();
        }
    }
}

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

        System.out.println("Provide the radius of the circle:");
        double radius = circleScanner.nextDouble();
        System.out.println("The area of the circle is: " + (Math.PI * Math.pow(radius, 2)));

        circleScanner.nextLine();
        circleScanner.close();
    }
}

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

        System.out.println("Provide the length of one side of the square:");
        double side = squareScanner.nextDouble();
        System.out.println("The area of the square is: " + Math.pow(side, 2));

        squareScanner.nextLine();
        squareScanner.close();
    }
}

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

        System.out.println("Provide the length of the smaller base of the trapezium:");
        double smallBase = trapeziumScanner.nextDouble();
        System.out.println("Provide the length of the larger base of the trapezium:");
        double largeBase = trapeziumScanner.nextDouble();
        System.out.println("Provide the height of the trapezium:");
        double height = trapeziumScanner.nextDouble();
        System.out.println("The area of the trapezium is: " + (((smallBase + largeBase) * height) / 2));

        trapeziumScanner.nextLine();
        trapeziumScanner.close();
    }
}

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

        System.out.println("Provide the length of the base of the parallelogram:");
        double base = parallelogramScanner.nextDouble();
        System.out.println("Provide the height of the parallelogram:");
        double height = parallelogramScanner.nextDouble();
        System.out.println("The area of the parallelogram is: " + base * height);

        parallelogramScanner.close();
    }
}

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

        System.out.println("Provide the length of the rectangle:");
        double length = rectangleScanner.nextDouble();
        System.out.println("Provide the height of the rectangle:");
        double height = rectangleScanner.nextDouble();
        System.out.println("The area of the rectangle is: " + length * height);

        rectangleScanner.close();
    }
}

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

        System.out.println("Provide the length of the base of the triangle:");
        double base = triangleScanner.nextDouble();
        System.out.println("Provide the height of the triangle:");
        double height = triangleScanner.nextDouble();
        System.out.println("The area of the triangle is: " + (height * base) / 2);

        triangleScanner.close();
    }
}

请注意,我已经移除了非代码部分的内容,只返回了代码翻译的部分。如果您有任何问题或需要进一步的帮助,请随时提问。

英文:

Goal: I'm creating a program that would allow me to calculate the area of multiple types of figures. To do so, I want to use a scanner to read user input and assess if the String provided is equal to one of my figure names. If so, it would invoke a method from the figure class that has another scanner.

Error: It's giving me an input mismatch when I enter the figure's name to be redirected to another class' scanner. Here's the error ->

    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

Here's the code:

    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();
    }
}

I'd appreciate it so much if I could get some help. I'm still a beginner learning to program. It'd be largely appreciated!

EDIT: The non-essential parts of the code, aka the response and the questions are in Portuguese. For the error here's what it's saying -> Enter which of these figures' area you wish to calculate: circumference, triangle, circle, rectangle, trapezium, etc.
I enter: circle
It then leads to to the Circle class and asks: Enter the circle's radius ->
But before I can press anything the scanner's already closed and the error is in place.

huangapple
  • 本文由 发表于 2020年4月5日 10:19:28
  • 转载请务必保留本文链接:https://java.coder-hub.com/61037228.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定