3

次の 2 つのプログラムの違いを説明できる人はいますか? それらは私と同等に見えますが、異なる出力を生成します。どういう理由ですか?

プログラム 1: 間違った値を出力します。i=1

public class Test1{
    public static void main(String[] args) {
        int[] values = new int[] { 2, 3, 5, 1 };

        int i = 0;
        for (Integer integer : values) {
            i =+ integer.intValue();
        } // for loop ends
        System.out.println("i=" + i);
    }
} 

プログラム 2: 期待値を出力します。i=11"

public class Test2{
    public static void main(String[] args) {
        int[] values = new int[] { 2, 3, 5, 1 };

        int i = 0;
        for (Integer integer : values) {
            i = i + integer.intValue();
        } // for loop ends
        System.out.println("i=" + i);
    }
} 
4

8 に答える 8

17

明らかに、主な違いは次の行にあります。

i =+ integer.intValue();

おそらく、最初のプログラムのi +=代わりに使用することを意図していたのでしょう。i =+あなたのバージョンでは、最初のプログラムは反復ごとに値を割り当てるだけなので、最終結果は配列の最後の値です(これは です1)。2 番目のプログラムは、本来の目的を果たします。配列内のすべての要素を追加し、その結果は11.

于 2013-07-05T06:54:04.207 に答える
10

追加して割り当てようとしましたが、間違った演算子を使用しています。

 for (Integer integer : values) {
     i =+ integer.intValue();
 } // for loop ends

これは、i = (+ integer.intvalue())

正しいのは次のとおりです。

for (Integer integer : values) {
     i += integer.intValue();
 } // for loop ends
于 2013-07-05T06:55:55.373 に答える
5

=+代わりに使用しています+=

おそらく、配列の最後の値を一方に出力し、もう一方に合計を出力するだけですよね?

これは、一方の値を繰り返し上書きしているだけで、実際にはもう一方の値を正しく合計しているためです。

于 2013-07-05T06:55:30.720 に答える
4

i =+ integer.intValue();単項演算 の再代入+integer.intValue()です。i配列内のすべての値で上書きしています。最後が最終結果です。

于 2013-07-05T06:55:33.590 に答える
4

整数の符号を操作し、加算を行わない単項演算子 '+'を使用しているためです。

したがって、基本的に何が起こるかというと、変数には値配列の最後の値iが含まれます。

編集:

Java での単項プラス演算子の使用

配列値がの場合、-1 と仮定します。この場合、古き良き符号の数学規則によるものです。

  • (+)(+) = (+)
  • (+)(-) = (-)
  • (-)(+) = (-)
  • (-)(-) = (+)

だからあなたがするときi = (+ (-1)) = -1。答えは-1のままです。

したがって、配列の最後の値を -1 またはその他の負の値のままにしておくと、同じ値が得られます。

于 2013-07-05T06:57:49.490 に答える
3

クラスtest1コードに何か問題がありますか. i + =integer.intValue() =+の代わりにすべきだと思われます

于 2013-07-05T06:55:34.397 に答える
3

=のように LHS を明示的に記述せずに LHS を使用する場合は、常に演算子 (+、-、​​| など) を = の前に記述します。

+= ,-=, |=

または比較演算子として <=, >= ....

于 2013-07-05T08:30:51.613 に答える
0
    int[] values = new int[] { 2, 3, 5, 1 };
    int i = 0;
    for (Integer integer : values) {
        i =+ integer.intValue();// here i's value  2,3,5 and finally 1. then your out put is 1.
    } // for loop ends
    System.out.println("i=" + i);

しかし、次のケースでは、配列に int 値を持つ i の現在の値を追加しています。したがって、明らかに、i の配列で int 値の一部を取得します。

    int[] values = new int[] { 2, 3, 5, 1 };
    int i = 0;
    for (Integer integer : values) {
        i = i + integer.intValue();
    } // for loop ends
    System.out.println("i=" + i);
于 2013-07-05T07:06:05.973 に答える