我正在實作一個計算圓形和矩形的面積和周長的程式。半徑(圓),寬度,高度(矩形)從用戶那里得到。問題是:我輸入radius引數后,控制臺彈出訊息:
執行緒“main”中的例外 java.util.NoSuchElementException at...
Main.java 位于 main 包中,Circle.java 和 Rectangle.java 位于 shape 包中。
主.java:
package main;
import shapes.Circle;
import shapes.Rectangle;
//import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Circle cir = new Circle();
Rectangle rec = new Rectangle();
cir.printArea();
cir.printPerimeter();
rec.printArea();
rec.printPerimeter();
}
}
圈子.java:
package shapes;
import java.util.Scanner;
public class Circle {
final double PI = 3.14;
double radius;
double area, perimeter;
public Circle(double radius) {
this.radius = radius;
area = PI*radius*radius;
perimeter = 2*PI*radius;
}
public Circle() {
System.out.print("radius = ");
Scanner scan = new Scanner(System.in);
radius = scan.nextDouble();
scan.close();
area = PI*radius*radius;
perimeter = 2*PI*radius;
}
public void printArea() {
System.out.println("Area of circle = " area);
}
public void printPerimeter() {
System.out.println("Perimeter of circle = " perimeter);
}
}
矩形.java:
package shapes;
import java.util.Scanner;
public class Rectangle {
public double length, width;
double area, perimeter;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
area = length * width;
perimeter = (length width) * 2;
}
public Rectangle() {
Scanner scan = new Scanner(System.in);
System.out.print("width = ");
width = scan.nextDouble();
System.out.print("length = ");
length = scan.nextDouble();
scan.close();
area = length * width;
perimeter = (length width) * 2;
}
public void printArea() {
System.out.println("Area of rectangle = " area);
}
public void printPerimeter() {
System.out.println("Perimeter of rectangle = " perimeter);
}
}
為什么會發生這種情況以及如何解決?
uj5u.com熱心網友回復:
- 您的 Scanner 應該在主類中并且是靜態的,您只使用一個,不需要更多。
- Circle 和 Rectangle 有一些基本方法應該被淘汰,所以使用介面或者在這種情況下更好地使用像 Geoform 這樣的抽象類作為超類。
- 并且不要關閉掃描儀,這根本沒有必要。
主要的:
public class Main {
private static final Scanner scan = new Scanner(System.in);
private static Circle createCircle(){
System.out.print("radius = ");
double radius = scan.nextDouble();
return new Circle(radius);
}
private static Rectangle createRectangle() {
System.out.print("width = ");
double width = scan.nextDouble();
System.out.print("length = ");
double length = scan.nextDouble();
return new Rectangle(width, length);
}
public static void main(String[] args) {
Circle cir = createCircle();
Rectangle rec = createRectangle();
cir.printArea();
cir.printPerimeter();
rec.printArea();
rec.printPerimeter();
}
}
幾何形狀:
public abstract class Geoform {
final double area;
final double perimeter;
public Geoform(double area, double perimeter) {
this.area = area;
this.perimeter = perimeter;
}
public void printArea() {
System.out.println("Area = " area);
}
public void printPerimeter() {
System.out.println("Perimeter = " perimeter);
}
}
圓圈:
public class Circle extends Geoform{
public static final double PI = 3.14;
private final double radius;
public Circle(double radius) {
super(PI*radius*radius, 2*PI*radius);
this.radius = radius;
}
public double getRadius() {
return radius;
}
}
長方形:
public class Rectangle extends Geoform {
private final double length, width;
public Rectangle(double width, double length) {
super(length * width, (length width) * 2);
this.width = width;
this.length = length;
}
public double getLength() {
return length;
}
public double getWidth() {
return width;
}
}
uj5u.com熱心網友回復:
你有幾個問題..
首先,您需要學習如何撰寫更清晰的代碼,例如:circle,而不是“cir”。像 Circle circle=new Circle(); 其次,我們通常不會在建構式內部使用 Scanner 嘗試在方法內部使用。或創建輸入讀取方法。第三,不要關閉掃描儀。(很可能這是錯誤的原因)。嘗試評論您的代碼..
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498090.html
