Cześć
Od razu zaznaczam - jestem totalnym świeżakiem i stąd moja wielka prośba o pomoc, bo tylko z tym zadaniem mam problem.
Wiem, że wydaje się, że podobny wątek był, ale w tamtym de facto zabrnęło to donikąd, a poza tym ja chcę zrobić to inaczej, bo tamto wyjdzie zbyt zagmatwane.
Mianowicie mam zadanie, aby stworzyć metodę boolean, która zweryfikuje czy choinka wczytana z pliku ma odpowiednią ilość spacji, gwiazdek i czy cała struktura jest poprawnie zbudowana. A mianowicie stworzyłem takie coś:
List<String> lines = Files.readAllLines(Paths.get("plik.txt"));
int height = lines.size();
for (int i = 0; i < lines.size(); i++) {
System.out.println(i);
for (int j = 0; j < lines.get(i).length(); j++) {
if (j < (height - i) || j > (height + i)) {
if (!lines.get(j).equals(" ")) {
System.out.print(j);
System.out.print("choinka się nie zgadza");
}
} else if (j == height) {
if (!lines.get(j).equals("*")) {
System.out.print("choinka się nie zgadza1");
}
}
}
}
Ja wiem, że tutaj nie powinno wyświetlać za każdym razem "choinka się nie zgadza" jak się nie zgadzają znaki (teoretycznie chciałbym, aby tak działało), a powinien być zwrócenie warunku boolean, ale to tak zrobiłem póki to robię, abym wiedział, gdzie jest błąd.
Ale właśnie mi to nie działa. Mianowicie są dwa problemy:
Poza zasięgiem indeksu i weryfikacja czy znak się zgadza (metoda equals).
Wyskakuje mi takie coś (program się odpala, podaję wynik tego kodu + info z programu):
"0
0choinka się nie zgadza1choinka się nie zgadza2choinka się nie zgadzaException in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 3
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at Zadanie6.main(Zadanie6.java:39)"
I gdzie ja w tym algorytmie jest błąd?
Uprzedzam, że chciałem zmienić na iterowanie po Stringu ( metoda charAt()), ale nie ma możliwości porównania (equals()), a jak nawet tak zrobiłem pętle z wyświetlaniem w ten sposób znaków to choinka się wyświetli.
Z indeksem to używając tej samej pętli, nic nie zmieniając w konstrukcji pętli, zmieniając tylko warunki " if (!lines.get(j).equals(" "))" na wyświetlenie znaku to nie wyskakuje żaden błąd.
Pytanie, gdzie ja tutaj zrobiłem błąd? Na prawdę piszę do Was już jako ostateczność, bo próbowałem wszystkiego, przerobiłem już sporo zadań, to mam na teście, i siedzę nad tym od 4 godzin i dalej nie wiem jak rozwiązać to zadanie, aby było klarownie, czysto i łatwo. Moglibyście mi powiedzieć, gdzie zrobiłem błąd i na co zamienić? Byłbym bardzo wdzięczny