0

2 つのコンストラクターを持つBoxクラスを作成しました。1 つはBox()デフォルトのコンストラクターで、ユーザーが空白Box(length, breadth, height)を入力したときに実行されるもので、もう 1 つは、ユーザーが実際に特定の Box に入力を入力したときに実行されるものです。Boxそこで、次のようにクラスを書きました。

class Box{

    private int length, breadth, height;

    //Default Constructor
    Box(){
        System.out.print("No Parameter given"); 
    }

    //Parameterized Constructor
    Box(int l, int b, int h){
        length=l; breadth=b; height=h;
    }

    int volume(){
        return breadth*height*length;
    }
}

したがって、ここmain()にコードを実装しようとしている関数があります。私の意図は、入力が空白の場合はデフォルトのコンストラクターを呼び出し、入力が空でない場合は 2 番目のコンストラクターによってボリュームを計算することです。

class mybox{
    public static void main(String args[]) throws IOException{
            System.out .print("Enter length, breadth and height->>");
            Scanner scanner=new Scanner(System.in);
            int length1=scanner.nextInt();
            System.out.println("Length= "+length1);
            int breadth1=scanner.nextInt();
            System.out.println("Breadth= "+breadth1);
            int height1=scanner.nextInt();
            System.out.println("Height= "+height1);

            if( length1== Integer.parseInt(" ") 
                && breadth1== Integer.parseInt(" ") 
                && height1== Integer.parseInt(" ") ){
                Box samplebox=new Box();
            }
            else {
                Box samplebox=new Box(length1, breadth1, height1);
                try{
                    System.out.println("The volume of the box is " + samplebox.volume());
                } catch (ArithmeticException e){
                    e.printStackTrace();
                }
            }
     }
}

Eclipse で、行に「ローカル変数 samplebox の値が使用されていません」という警告が表示されますBox samplebox=new Box()。では、コードのどこにエラーがあるのでしょうか?

4

4 に答える 4

1
scanner.nextInt()

空文字列の入力は受け付けません。有効な数値/文字入力を待ちます。

Integer.parseInt(" ")空のスペースは有効な整数文字列ではないため、例外がスローされます。

于 2013-11-06T04:02:03.727 に答える
1

このコードでは:

if(length1== Integer.parseInt(" ") && breadth1== Integer.parseInt(" ") && height1== Integer.parseInt(" "))
{
    Box samplebox=new Box();
}
else
{
    Box samplebox=new Box(length1, breadth1, height1);
    try{
        System.out.println("The volume of the box is "+ samplebox.volume());
    }
    catch (ArithmeticException e)
    {
        e.printStackTrace();
    }
}

sampleboxの各ブランチに 1 つずつ、という名前の 2 つの個別の変数を宣言していifます。最初のものは、範囲外になる前に使用されていません。変数に値を代入することは、値を「使用」することではありません。Eclipse は、割り当てられた値をどこでも使用できないことを認識し、コードに問題がある可能性があることを警告しています。

1 つの解決策は、値を割り当てた後でブランチsamplebox内で何かを行うことです。ifまたは、これを行うことができます:

Box samplebox;
if(length1== Integer.parseInt(" ") && breadth1== Integer.parseInt(" ") && height1== Integer.parseInt(" "))
{
    samplebox=new Box();
}
else
{
    samplebox=new Box(length1, breadth1, height1);
    try{
        System.out.println("The volume of the box is "+ samplebox.volume());
    }
    catch (ArithmeticException e)
    {
        e.printStackTrace();
    }
}
// . . . use samplebox

宣言自体を分岐の外に移動することで、ステートメント自体ifよりも大きなスコープを持つ変数に代入することになります。if

于 2013-11-06T04:02:04.213 に答える
0
if(length1== Integer.parseInt(" ") && breadth1== Integer.parseInt(" ") && height1== Integer.parseInt(" "))
{
    // Here you assign a variable samplebox that is local (within the {})
    // but you don't use it for anything.
    // i.e. The value of the local variable samplebox is not used
    //
    Box samplebox=new Box();
}
于 2013-11-06T04:02:19.573 に答える