0
long temp;
for ( int i = 0; i < size; i++ )
{
    temp = ls.get(i);
    System.out.println("temp is:" + temp);
    for ( int j = 0; j < size; j++)
    {
            if ( i == j )
            {

            }
            else if ( ls.get(i) == ls.get(j) )
            {
                // If Duplicate, do stuff... Dunno what yet.
                System.out.println(ls.get(i)+" is the same as: " + ls.get(j) );
                //System.out.println("Duplicate");
            }

    }
}

Longタイプのリストがあり、900876012のようないくつかの9桁の数字で埋められています。ファイルにエクスポートする前に、新しい数字を生成して重複を置き換えることができるように、重複をチェックしています。

まず、配列内の位置が同じであるかどうかを確認します。明らかに、位置1の何かが、位置1の同じリストで同じになるため、同じである場合は無視します。

次に、内容が同じかどうかを確認しますが、何らかの理由で真とは評価されません。以前は、それ自体が単純な「if」として評価されていました。

参考までに、ここに数字があります。「tempis」は無視してください。

temp is:900876512
temp is:765867999
temp is:465979798
temp is:760098908
temp is:529086890
temp is:765867999
temp is:529086890
temp is:800003243
temp is:200900210
temp is:200900210
temp is:542087665
temp is:900876512
temp is:900876512
temp is:900876512
temp is:900876512

参照用の完全な方法は次のとおりです。

public static void CheckContents(BufferedReader inFileStreamName, File aFile, Scanner s ) throws DuplicateSerialNumberException
{
    System.out.println();
    List<Long> ls = new ArrayList<Long>();
    List<String> ls2 = new ArrayList<String>();

long SerialNum = 0;
int counter = 0;
int size = 0;
String StringBuffer;

while (s.hasNextLine())
{
    ls.add(s.nextLong());
    //System.out.println();
    StringBuffer = s.nextLine();
    ls2.add(StringBuffer);
    size = ls.size();
    //System.out.println(ls.size());
    SerialNum = ls.get(size-1);
    //System.out.println(ls.get(size-1));
    System.out.println("Serial # is: " + SerialNum);
    //System.out.println(SerialNum + ": " + StringBuffer);
    counter++;
}

long temp;
for ( int i = 0; i < size; i++ )
{
    temp = ls.get(i);
    System.out.println("temp is:" + temp);
    for ( int j = 0; j < size; j++)
    {
        if ( i == j )
        {

        }
        else if ( ls.get(i) == ls.get(j) )
        {
            // If Duplicate, do stuff... Dunno what yet.
            System.out.println(ls.get(i)+" is the same as: " + ls.get(j) );
            //System.out.println("Duplicate");
        }

    }
}


}
4

2 に答える 2

1

いいもの。

floatリストには、 (プリミティブ)ではなくFloatオブジェクトを保存します。オートボクシングはあなたをあなたに透明にします。

また、==コンパレータはオブジェクトでは機能しません(両方のオブジェクトが同じであるかどうかはわかりますが、同じ値を保持する2つのオブジェクトがある場合は戻りますfalse)。

使用できます

   if ( ls.get(j).equals(ls.get(i)) 

または(なのでList<Long>

   if ( ls.get(j).longValue() == ls.get(i).longValue())

または(オートボクシングのおかげで)

   if ( ls.get(j).longValue() == ls.get(i))
于 2013-03-24T19:21:03.747 に答える
0

してみてください

else if ( ls.get(i) != null && ls.get(i).equals(ls.get(j)) )

代わりは

于 2013-03-24T19:22:18.893 に答える