私は非常に奇妙な問題を抱えていますが、原因はわかりません。 removeメソッドは、間違った要素をlinkedListから削除します。これは簡単な例です:LinkedListは間違ったインデックスを削除します
LinkedList<Long> list = new LinkedList<>();
int pos=1;
System.out.println("pos+1:"+(pos+1)); //prints 2 which is true
list.remove(pos+1); //deletes 5th element
//if i write list.remove(2); it will delete 2th element which is of course ok
これは4番目のループ(0からのインデックス)とこの入力に対して起こります。8 5 1 2 3; また、私はそれを入力3 1 2 3に追加します。すべて正常に動作します。
ここにすべてのコードを貼り付けます。ヘルプ
import java.util.LinkedList;
import java.util.Scanner;
class Zad3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
long iloscZnakow = 0;
long wyrazCiagu;
LinkedList<Long> list = new LinkedList<>();
long iloscOperacji = input.nextLong();
iloscZnakow += String.valueOf(iloscOperacji).length();
long pos = 0;
while (input.hasNext()) {
wyrazCiagu = input.nextLong();
list.add(wyrazCiagu);
iloscZnakow += String.valueOf(wyrazCiagu).length();
}
long wartoscPrzesuniecia;
for (long i = 0; i < iloscOperacji; i++) {
System.out.print(i + ":postac poczatkowa ciagu:");
for (long l : list) {
System.out.print(l + " ");
}
System.out.println();
System.out.println("pos aktualna pozycja:" + list.get((int) pos) + " indeks:" + pos);
if (list.get((int) pos) % 2 == 0) {// R
System.out.print("wykonana operacja R ");
if (pos == list.size() - 1) {
wartoscPrzesuniecia = list.get(0);
} else {
wartoscPrzesuniecia = list.get((int) pos + 1);
}
System.out.println();
System.out.println("pos+1:" + (pos + 1));
list.remove(pos + 1);
System.out.println("c=" + wartoscPrzesuniecia);
if (pos + wartoscPrzesuniecia >= list.size()) {
while (pos < list.size()) {
pos++;
wartoscPrzesuniecia--;
}
pos = wartoscPrzesuniecia;
} else {
pos += wartoscPrzesuniecia;
}
} else {// X
System.out.print("wykonana operacja X ");
wartoscPrzesuniecia = list.get((int) pos);
long liczba = wartoscPrzesuniecia - 1;
list.add((int) (pos + 1), liczba);
System.out.println("c=" + wartoscPrzesuniecia);
if (pos + wartoscPrzesuniecia >= list.size()) {
while (pos < list.size()) {
pos++;
wartoscPrzesuniecia--;
}
pos = wartoscPrzesuniecia;
} else {
pos += wartoscPrzesuniecia;
}
}
System.out.print(":postac koncowa ciagu:");
for (long l : list) {
System.out.print(l + " ");
}
System.out.println();
System.out.println("finalna pozycja POS: " + list.get((int) pos));
}
for (long i = pos; i < list.size(); i++) {
System.out.print(list.get((int) i) + " ");
}
for (long i = 0; i < pos; i++) {
System.out.print(list.get((int) i) + " ");
}
System.out.println();
System.out.print(iloscZnakow);
input.close();
}
}
を2'? –
あなたの入力はどのように見えますか? – johnII