1

形状を拡大縮小しようとすると、何も起こらず、コンソールは入力への応答を停止します。setscaleコマンドは次のとおりです。

case 7: do
                         {
                            System.out.println("\nEnter scale factor");
                            scale=input.nextDouble();
                         }
                         while(scale<0);
                         Shape.setScaleFactor(scale);
                         break;

これがscaleshapeコマンドです

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

サークルクラスのsetscaleメソッドは次のとおりです。

private final double pi = Math.PI;
    private double radius;
 @Override public void scaleShape()
    {
         radius*=getScaleFactor();
    }
4

1 に答える 1

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代わりに a を読んで、実際にどのような入力が得られているかを確認することをお勧めします。いつでも文字列を読み取ってログに記録し、それを使用Double.valueOf(String)して変換できます。

もう 1 つの可能性は、それが機能しているということですが、リセットすることはなくscale、これはある種のループに入っているため、形状を永遠にスケーリングし続けますが、再び入力を求めるために停止することはありません。

于 2012-10-11T03:39:07.540 に答える