2

私はそのような単純なコードを持っています:

import java.util.ArrayList;
import java.util.List;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
        Integer max = 2324;
        List<Integer> indexes = new ArrayList<Integer>();
            for (int e = 0; e < tab.length; e++) {
                if (tab[e] == max) {
                    indexes.add(new Integer(e));
                    System.out.println("Found max");
                }
            }
    }
}

tabここでの主な問題は、値がある場所のすべてのインデックスを見つけたいということmaxです。今のところ、動作しません。Found max メッセージは 1 回も表示されませんが、3 回表示されるはずです。問題はどこですか?

わかりました、これは最終的に機能しました。皆さんに感謝します:

public static void main(String[] args) {
        Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
        Integer max = 2324;
        List<Integer> indexes = new ArrayList<Integer>();
            for (int e = 0; e < tab.length; e++) {
                if (tab[e].intValue() == max.intValue()) {
                    indexes.add(Integer.valueOf(e));
                    System.out.println("Found max");
                }
            }
    }
4

8 に答える 8

9

変化する

Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};

int[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};

Integerオブジェクトは、-128 から 127 までの値に対してのみ事前キャッシュされます。


残したいならInteger変えればいい

if (tab[e] == max) {

if (tab[e].equals(max)) {

これは、参照の等価性ではなく、オブジェクトの等価性をチェックするためです。

于 2013-05-13T12:11:57.567 に答える
3

==プリミティブ int ではなく、 class のインスタンスである演算子を使用していますInteger。基本的に、異なる両方のオブジェクトの参照を比較しています。使ってみてください:

if(tab[e].equals(max))
于 2013-05-13T12:13:18.323 に答える
2

JVM は整数値をキャッシュしています。

==-128 から 127 の間の数値に対してのみ機能します

ここで説明を参照してください: http://www.owasp.org/index.php/Java_gotchas#Immutable_Objects_.2F_Wrapper_Class_Caching

于 2013-05-13T12:19:34.010 に答える
1

3 つのいずれかを使用します: 1.tab[e].intValue() == maxまたは 2.int max = 2324;または 3. Integerクラスのequals()メソッドを使用します。

于 2013-05-13T12:13:05.577 に答える