5

次のJavaコードを修正しようとしていますが、

プリントアウトがまだ 5 である理由がわかりません。

public class simpleMath
{
    public static void main(String[] args) 
    {
        int number=5;
        half(number);

        System.out.println("5 divided by 2 is: " + number);

    }

    private static double half(int number) {
         number =  number/2;
         return number;
    }
}
4

7 に答える 7

17

戻り値を再割り当てしていないためです。

int number = 5;
number = half(number);
于 2012-05-31T10:58:56.193 に答える
9

関数を呼び出すと、その戻り値が破棄されます。

half(number);

あなたはおそらく次のように書くつもりでした:

number = half(number);

また、Java では、引数は値渡しです。これはnumber、関数内で変更しても、変更が呼び出し元に反映されないことを意味します。

さらにいくつかの問題があります。

問題 1:number提案された変更では、整数変数であるに結果が格納されます。したがって、half()型である --の結果はdouble整数に切り捨てられます。精度が失われないようにnumberするには、浮動小数点変数に変更するか、結果を適切な型の別の変数に格納する必要があります。

問題 2:以下は整数除算を使用します。

number =  number/2;

結果は整数に切り捨てられます。つまり5 / 2is2です。後者はdouble(2.0) に変換され、関数が返すものです。

修正するには、関数を次のように変更します。

private static double half(int number) {
     return number / 2.0;
}

PS 浮動小数点数には、直感的ではない多くのプロパティがあります。What Every Computer Scientist Should Know About Floating-Point Arithmetic をご覧になることをお勧めします。

于 2012-05-31T10:58:26.143 に答える
1

値によって行われるプリミティブ データ型を渡します。メソッド half() で SOP を指定する必要があります。編集: メソッド half() によって返された結果を、number に割り当てるか、SOP 自体でこのメソッドを呼び出すことによって使用する必要があります。

于 2012-05-31T11:00:09.650 に答える
1

関数で宣言されたhalf(number)変更を行わないのはなぜですか? これは、関数に値を渡して評価するためです。つまり、関数に値のコピーを渡します。したがって、関数が何を行っても、 で宣言された変数に反映されません。値を更新する場合は、の戻り値をinに割り当てる必要があります。number main()numberhalf()numberhalf()half()numbernumbermain()half()numbermain()

変数のシャドウイングなど、混乱を招く可能性があるため、詳細については説明しません。

于 2012-05-31T11:07:38.723 に答える
0

half()これは、 toの戻り値を割り当てていないためですnumber。計算されますが、使用されません。

あなたは言う必要があります:

number = half(number); 

number現在の方法は、値ではなく参照によって渡された場合にのみ機能します。

于 2012-05-31T11:00:03.453 に答える
-5

まず、変数に割り当てている型を認識する必要があります。コードを次のように変更する必要があります。

    public class simpleMath
    {


        public static void main(String[] args) 
        {
            double number = 5;
            double answer = half(number);

            System.out.println(" 5 divided by 2 is:"+ answer);

        }

        private static double half(double number) {
             number =  number/2.0;
             return number;
        }

    }

戻り値の使用方法と 2.0 で割る方法を確認してください。これらの変更により、探している結果が得られます。

于 2012-05-31T11:05:28.307 に答える