将上述程序进行一下修改:修改圆的半径的输入方式为从键盘上输入,为防止输入负数,请通过throws和throw设计出一旦出现负数时的异常处理方法,并通过本题的测试类进行测试。
时间: 2023-08-31 08:30:09 浏览: 76
更改所选定圆的直径
### 回答1:
下面是修改后的程序,包括了异常处理:
```java
import java.util.Scanner;
class Circle {
private double radius;
public void setRadius(double radius) throws IllegalArgumentException {
if (radius < 0) {
throw new IllegalArgumentException("半径不能为负数");
}
this.radius = radius;
}
public double getRadius() {
return radius;
}
public double calculateArea() {
return Math.PI * radius * radius;
}
}
public class TestCircle {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Circle circle = new Circle();
while (true) {
try {
System.out.print("请输入圆的半径:");
double radius = input.nextDouble();
circle.setRadius(radius);
break;
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
input.nextLine();
System.out.println("输入错误,请重新输入");
}
}
System.out.printf("圆的半径为:%.2f\n", circle.getRadius());
System.out.printf("圆的面积为:%.2f\n", circle.calculateArea());
}
}
```
测试类:
```java
public class TestCircle {
public static void main(String[] args) {
Circle circle = new Circle();
try {
circle.setRadius(5);
assert circle.getRadius() == 5;
assert circle.calculateArea() == 78.53981633974483;
circle.setRadius(0);
assert circle.getRadius() == 0;
assert circle.calculateArea() == 0;
circle.setRadius(2.5);
assert circle.getRadius() == 2.5;
assert circle.calculateArea() == 19.634954084936208;
circle.setRadius(-1);
} catch (IllegalArgumentException e) {
assert e.getMessage().equals("半径不能为负数");
}
}
}
```
在输入负数时,会抛出 `IllegalArgumentException` 异常,并打印出错误信息。测试类中也测试了输入正常数值的情况。
### 回答2:
根据题目要求,我们需要对程序进行修改,将圆的半径的输入方式修改为从键盘上输入,并添加异常处理方法以防止输入负数。以下是具体的修改步骤:
1. 在圆类的方法中添加一个新的静态方法,命名为getPositiveInput(),该方法用于从键盘上获取用户输入的半径值,并返回一个大于等于0的正数。
2. 在getPositiveInput()方法中使用try-catch块来捕捉异常,并通过throw关键字抛出NegativeInputException异常,用于表示输入了负数的情况。
3. 创建一个自定义异常类NegativeInputException,继承自Exception类。
4. 在测试类中,通过调用圆类的getPositiveInput()方法获取用户输入的半径值,并进行异常处理。如果捕捉到NegativeInputException异常,则输出错误信息。
5. 继续执行其他操作。
下面是具体的代码实现:
```java
// 圆类
public class Circle {
private double radius;
// 设置圆的半径,通过键盘输入
public void setRadiusFromKeyboard() {
try {
radius = getPositiveInput();
} catch (NegativeInputException e) {
System.out.println(e.getMessage());
}
}
// 获取用户输入的正数
public static double getPositiveInput() throws NegativeInputException {
Scanner scanner = new Scanner(System.in);
double input = scanner.nextDouble();
if (input < 0) {
throw new NegativeInputException("输入的半径值不能为负数!");
}
return input;
}
// 其他方法...
}
// 自定义异常类
class NegativeInputException extends Exception {
public NegativeInputException(String message) {
super(message);
}
}
// 测试类
public class CircleTest {
public static void main(String[] args) {
Circle circle = new Circle();
System.out.println("请输入圆的半径:");
circle.setRadiusFromKeyboard();
}
}
```
通过以上修改和测试类的实现,我们可以从键盘上输入圆的半径值,并通过异常处理方法防止输入负数。当输入负数时,会抛出NegativeInputException异常,并输出错误信息。
### 回答3:
根据题意,我们需要对上述程序进行修改,将圆的半径的输入方式改为从键盘上输入,并且需要设计异常处理方法来防止输入负数。下面是具体的修改过程:
首先,我们可以在Circle类中添加一个新的静态方法:
```java
public static double inputRadiusFromKeyboard() throws NegativeRadiusException {
Scanner scanner = new Scanner(System.in);
double radius = scanner.nextDouble();
if (radius < 0) {
throw new NegativeRadiusException("半径不能为负数");
}
return radius;
}
```
然后,在测试类中,我们可以调用这个新方法来输入圆的半径,并进行异常处理:
```java
public class Test {
public static void main(String[] args) {
try {
double radius = Circle.inputRadiusFromKeyboard();
Circle circle = new Circle(radius);
System.out.println("圆的半径为:" + circle.getRadius());
System.out.println("圆的面积为:" + circle.getArea());
System.out.println("圆的周长为:" + circle.getPerimeter());
} catch (NegativeRadiusException e) {
System.out.println("输入的半径为负数!");
e.printStackTrace();
}
}
}
```
最后,我们还需要自定义一个NegativeRadiusException类,用于抛出半径为负数的异常:
```java
public class NegativeRadiusException extends Exception {
public NegativeRadiusException(String message) {
super(message);
}
}
```
这样一来,当从键盘输入的半径为负数时,就会抛出NegativeRadiusException异常,并在测试类中进行异常处理。
这样就完成了对上述程序的修改,能够按照题目的要求进行输入和异常处理。
阅读全文