每当我尝试缩放形状时,都没有任何反应,然后控制台停止响应输入。 这是set scale命令:
case 7: do
{
System.out.println("\nEnter scale factor");
scale=input.nextDouble();
}
while(scale<0);
Shape.setScaleFactor(scale);
break;
这是比例形状命令
case 4: for(i=0; i<s.length; i++)
{
if(s[i]!=null)
{
s[i].scaleShape();
}
}
break;
以下是主要的方法变量:
int i=0;
int m=0;
double scale;
boolean exit=false;
Shape[] s = new Shape[10];
以下是形状类中的所有相关方法;
private static double scaleFactor;
public static double getScaleFactor()
{
return scaleFactor;
}
//Set ScaleFactor
public static void setScaleFactor(double x)
{
scaleFactor=x;
}
这是矩形子类
中的scaleshape方法private double base;
private double height;
@Override public void scaleShape()
{
base=base*getScaleFactor(); height=height*getScaleFactor();
}
public abstract void scaleShape();
以下是圆圈类中的设定比例方法:
private final double pi = Math.PI;
private double radius;
@Override public void scaleShape()
{
radius*=getScaleFactor();
}
答案 0 :(得分:1)
我的猜测是你的问题在这里:
do
{
System.out.println("\nEnter scale factor");
scale = input.nextDouble();
}
while(scale < 0);
如果添加一些日志记录会怎样?
do
{
System.out.println("\nEnter scale factor");
scale = input.nextDouble();
System.out.println("Scale entered was: " + scale);
System.out.println("Is scale < 0? " + (scale < 0));
}
while(scale < 0);
如果你没有得到你期望的东西,那么在String
中阅读而不是看看你实际得到的输入可能是值得的。您始终可以读取字符串,记录它,然后使用Double.valueOf(String)
进行转换。
另一种可能性是它正在工作,但你永远不会重置scale
,这是某种循环,所以它只是继续永久地缩放形状,但永远不会停止再次请求输入。