0

私はJavaでコードを持っています:

for(Iterator it = c.getArrayList().iterator(); it.hasNext(); ) {
    Object i = it.next();

    // Here I have an error, i is not a boolean
    if (i) {
        System.out.format("Delete %s%n", i);
        it.remove();
    }
    else {
        System.out.println("End");
        break;
    }
}

しかし、if句はエラーをスローします。期待するbooleanObject与えられる。Javaは型を変換できませんよね?

ifタイプをどのように変更する必要がありますか、またはそれを正しく機能させるために句に何を入れる必要がありますか?

更新:

これは文字列のコレクション (ArrayList) です。

Object i = it.next();   // I get one element from collection.
if (i) {   // check if it's not the end, if it's not the last element of the collection
4

7 に答える 7

3

null かどうかをテストしようとしていますか?

if (i != null) {
    System.out.format("Delete %s%n", i);
    it.remove();
}
else {
    System.out.println("End");
    break;
}

のブール値をチェックしてiおり、ArrayListが であるList<Boolean>場合は、 を使用できますがIterator<Boolean> it、ヌルポインターの例外に注意する必要があります。


編集:End null 以外のすべての文字列が削除されたときに印刷する場合は、elseブロックを削除して、ループEndの後に印刷するだけです。for

于 2012-12-26T14:23:19.130 に答える
1

Java は厳密に型指定された言語です。ブール値が必要な場合/期待する場合は、次のようにします...

        List<Boolean> list = new ArrayList<Boolean>();
    for (Iterator<Boolean> it = list.iterator(); it.hasNext(); ) {
        boolean i = it.next();

        if (i) {
            System.out.format("Delete %s%n", i);
            it.remove();
        }
        else {
            System.out.println("End");
            break;
        }
    }

それ以外の場合は、null であることに基づいて何かを削除しようとしているだけの場合 (他の人が示唆しているように、'if (i==null)')。

于 2012-12-26T14:28:47.070 に答える
1

これは、リストの最後の要素を削除するには非常に時間がかかります。代わりに、

list.remove(list.size() - 1);
于 2012-12-26T14:40:58.223 に答える
1

幸いにも Iterator にはhasNext()関数があります。

したがって、次を使用します。

Object i = null;
if(it.hasNext()){
    i = it.next();
}else{
    //done.
}
//Do stuff with i.
于 2012-12-26T14:24:23.877 に答える
1

何をテストしたいのか不明。

オブジェクトが存在するかどうかをテストする場合は、null を確認します。

if (i==null)

一部のプロパティを確認したい場合は、特定の型にキャストします

if(((MyClass)i).iDontWantLoLive()) 

オブジェクトがブール値の場合、ブール値にキャストします。

if((Boolean)i)  
于 2012-12-26T14:26:42.893 に答える
1

「End」の出力は、最後にこれを行うことを示唆しています。代わりにこれを行うことができます。

List list = c.getArrayList();
for(Object o: list)
    System.out.println("Delete " + o);
list.clear();
System.out.println("End");

注:format破棄する文字列を返すだけです。

于 2012-12-26T14:35:28.110 に答える
0

はい、Java は型を自動的に強制しません。を に手動でキャストする必要がObjectありBooleanます。

于 2012-12-26T14:23:28.973 に答える