我是stackoverflow的新手,我正在为我的一个类(特别是CSC 202J)开发一个项目,我差不多完成了,但是我遇到了一个小问题 - 输入功能不是工作正常。我编写了这个,以便矩形的默认宽度和长度为1.0,但是当我调用任何一个get方法时,我看到两个值都没有改变。我将提供我的代码(以及驱动程序类和赋值的要求,以及测试运行的输出。
分配:
创建一个Rectangle类。该类具有属性长度和宽度 默认为1.提供计算矩形周长和面积的方法 提供长度和宽度的set和get方法。设定方法 应验证长度和宽度是否都是大于或等于0.0且小于20.0的浮点数 编写一个程序来测试类Rectangle。
示例输出:
1. Set Length
2. Set Width
3. Exit
Choice: 1
Enter Length: 10
Length: 10.00
Width: 1.00
Perimeter: 22.00
Area: 10.00
1. Set Length
2. Set Width
3. Exit
Choice: 2
Enter Width: 15
Length: 10.00
Width: 15.00
Perimeter: 50.00
Area: 150.00
1. Set Length
2. Set Width
3. Exit
Choice: 1
Enter Length: 1
Length: 1.00
Width: 15.00
Perimeter: 32.00
Area: 15.00
1. Set Length
2. Set Width
3. Exit
Choice: 3
类:
import java.util.Scanner;
public class RectangleTest {
public static void main (String[] args)
{
int response = 0;
Scanner userInput = new Scanner(System.in);
Rectangle r = new Rectangle();
do{
System.out.println("1. Set Length");
System.out.println("2. Set Width");
System.out.println("3. Exit");
System.out.println("Choice: ");
response = userInput.nextInt();
if(response == 1)
{
System.out.println("Enter Length: ");
r.setLength(userInput.nextInt());
r.toString();
System.out.println("Length: " + r.getLength());
System.out.println("Width: " + r.getWidth());
System.out.println("Perimeter: " + r.perimeter());
System.out.println("Area: " + r.area());
}
if(response == 2)
{
System.out.println("Enter Width: ");
r.setWidth(userInput.nextInt());
r.toString();
System.out.println("Length: " + r.getLength());
System.out.println("Width: " + r.getWidth());
System.out.println("Perimeter: " + r.perimeter());
System.out.println("Area: " + r.area());
}
}
while(response != 3);
System.exit(0);
}
}
public class Rectangle {
private double length;
private double width;
public Rectangle(){
this.length = 1.0;
this.width = 1.0;
}
public double getLength(){
return this.length;
}
public double getWidth(){
return this.width;
}
public boolean setLength(double length){
if (length > 0.0 && 1 < 20.0){
return true;
}
return false;
}
public boolean setWidth(double width){
if(width > 0.0 && width < 20.0){
return true;
}
return false;
}
public double perimeter(){
return 2 * (this.length + this.width);
}
public double area(){
return this.getLength() * this.getWidth();
}
@Override
public String toString(){
return "Length: " + this.length +"\tWidth: " + this.width;
}
}
测试运行输出:
1. Set Length
2. Set Width
3. Exit
Choice:
1
Enter Length:
10
Length: 1.0
Width: 1.0
Perimeter: 4.0
Area: 1.0
1. Set Length
2. Set Width
3. Exit
Choice:
2
Enter Width:
14
Length: 1.0
Width: 1.0
Perimeter: 4.0
Area: 1.0
1. Set Length
2. Set Width
3. Exit
Choice:
3
如果这是一个我忽视的菜鸟错误,我道歉。
答案 0 :(得分:0)
您永远不会在setXXX()
方法中设置值。在您的代码中加入this.width = width
和this.length = length
。
public class Rectangle {
private double width;
private double length;
public boolean setWidth(double width) {
if(width >= 0.0 && width < 20.0) {
this.width = width; // <<< You need this line ...
return true;
} else return false;
}
public boolean setLength(double length) {
if(length >= 0.0 && length < 20.0) {
this.length = length; // <<< ... and this one, too!
return true;
} else return false;
}
}
答案 1 :(得分:-1)
要更改矩形类的值,您必须执行以下操作:
public void setwidth(double width){
if (width => 0.0 && width < 20.0){
this.width = width;
}
}
同样适用于长度。目前,您的代码返回一个布尔值,指示输入宽度是否在特定值内。 set方法不需要返回任何内容。
我注意到你的代码中的另一个错误,在setLength方法中;
public boolean setLength(double length){
if (length > 0.0 && 1 < 20.0){
return true;
}
return false;
}
您是否打算在if语句中键入length
if (length> 0.0 && 1 < 20.0)
?
另一个注意事项:在你的作业描述中,声明宽度和长度需要大于或等于零&#34;,所以在代码中if语句看起来像if (width >= 0.0 && width < 20.0)
。注意大于或等于符号。