-4

定義済み変数:

 LinkedList list1=new LinkedList();

Object get()in list1 は list1 のノードを取得します

Object remove()in list1 は list1 のノードを削除します

count()list1の長さです

for(int i=1;i<list1.count();i++){
  if(list1.get(i).startsWith('"',0)) //Error here
    list1.remove(i);
}

エラー: シンボルが見つかりません

シンボル: メソッド charAt(int)
場所: クラス オブジェクト

この問題を解決するには?list1 の (") で始まるノードを削除したいと思います。

4

7 に答える 7

3
  1. startsWithStringクラスのメソッドです。生の LinkedList タイプを使用しているため、 のように扱われLinkedList<Object>ます。文字列を使用する場合は、LinkedList<String>.
  2. startsWithString引数ではなく、引数のみを受け入れcharます。startsWith("\"")代わりに使用してください。
  3. に指定した 2 番目のパラメーターstartsWithは不要です。2 番目のパラメーターを指定しないと、開始位置が 0 と見なされます。
  4. ifステートメントの後に不要なセミコロンがあります。これにより、ifボディが空として扱われます。このセミコロンは必ず削除し、必要に応じて中括弧を使用してください。

修正したソリューションは次のようになります。

LinkedList<String> list1 = new LinkedList<String>();

// [...] Populate the list accordingly here

for(int i=1; i < list1.count(); i++){
    if (list1.get(i).startsWith("\"")) {
        list1.remove(i);
    }
}

その他の注意事項:

  1. for ループはインデックス 1 から始まります。これは最初の要素を削除しないことに注意してください。これがあなたの望む行動であるかどうかは確かです。
  2. リスト内の要素を削除すると、リスト内の後者の要素のインデックスが変更されます。

例えば:

[ "a", "b", "c", "d" ]
   ^
(remove element at index 0)

[ "b", "c", "d" ]
        ^
(remove element at index 1... uh oh, we missed "b"!)

[ "b", "d" ]
              ^
(remove element at index 2... ERROR; index out of bounds)
于 2012-11-21T04:46:16.853 に答える
0

文字列のリストの場合は、コンパイラにそのように伝える必要があります。Java はダックタイプではありません。オブジェクトが文字列であることをコンパイラに明示的に伝える必要があります。

List<String> list1=new LinkedList<String>();

そのように宣言すると、get(i)は String 型の参照を返し、そのメソッドを使用できます。

于 2012-11-21T04:44:55.473 に答える
0
  1. リスト型を指定しない場合、Java は is を のリストとして扱い、メソッドObjectはありませんObject.charAt()<String>タイプを追加します。

    LinkedList<String> list1 = new LinkedList<String>();
    

    getまたは、それがない場合は、呼び出しにキャストを追加します。

    if (((String) list1.get(i)).startsWith("\"", 0))
    
  2. このString.startsWith()メソッドは、char ではなく String 引数を取ります。

    if (list1.get(i).startsWith("\""))
    
  3. リストのインデックスは 0 ベースです。

    for (int i = 0; i < list1.count(); i++)
                 ^
    
  4. get(int)LinkedListでは使用しないでください。このメソッドは、ランダム アクセス用です。リンクされたリストは順番にすばやくトラバースできますが、ランダム アクセスは低速です。リストを順番に反復処理するか、高速ランダム アクセスをサポートするArrayListを使用する必要があります。

    for (String str: list1) {
    }
    
    // or
    
    List<String> list1 = new ArrayList<String>();
    
  5. 反復処理中にリストから要素を削除するのは難しいです。これを行う最善の方法は、反復子を使用することです。

    Iterator<String> it = list1.iterator();
    
    while (it.hasNext()) {
        String str = it.next();
    
        if (str.startsWith("\"")) {
            it.remove();
        }
    }
    
于 2012-11-21T04:45:08.730 に答える
0

Object で startWith を取得しようとしており、String として型キャストされています。

if(((String)list1.get(i)).startsWith('"',0))

于 2012-11-21T04:45:36.280 に答える
0

if(list1.get(i).startsWith("\"",0))

于 2012-11-21T04:45:54.417 に答える
0
List<String> itemsToBeRemoved = new ArrayList<String>();

for(int i=1;i<list1.count();i++){
    String str = list1.get(i);
    if(str.startsWith("\""))
    itemsToBeRemoved.add(str);
}
list1.removeAll(itemsToBeRemoved);
于 2012-11-21T04:46:11.803 に答える
0

メソッドを呼び出そうとするときに、LinkedList が保持またはキャストを実行するオブジェクト タイプを指定する必要がありますcharAt。何かのようなもの:

LinkedList<String> list1=new LinkedList<String>();

またはキャストString

if (((String) list1.get(i)).startsWith("\""))
于 2012-11-21T04:47:41.450 に答える