Inne

Mac „Indeks ciągu znaków poza zakresem: 0” …Czy ktoś może mi powiedzieć, co jest nie tak? (Jawa)

Chase R

Oryginalny plakat
8 maja 2008
PDX
  • 2 czerwca 2009
Właśnie skończyłem pisać ten program dla mojej klasy Java. To prosty program, który oblicza, ile kosztuje montaż ogrodzenia. Na końcu pyta „czy chciałbyś dokonać innego oszacowania (T/N)”, a użytkownik powinien wybrać tak lub nie. Jednak po tym, jak skończę uruchamiać moją, nie dostanę tej opcji, po prostu mówi:

Oblicz inne oszacowanie (T/N): wyjątek w wątku „głównym” java.lang.StringIndexOutOfBoundsException: Indeks ciągu znaków poza zakresem: 0
pod adresem java.lang.String.charAt (String.java:558)
w Test1.main(Test1.java:73)

Dlaczego to robi!!!

Oto program przy okazji:

Kod: |__+_|

Littleodie914

9 czerwca 2004 r.


Rochester, Nowy Jork
  • 2 czerwca 2009
Wow, to trudne. Dostałem to do pracy, zmieniając twój ostatni 'read.nextLine()' na po prostu 'read.next()', ale przyjrzę się trochę bliżej, aby zobaczyć, dlaczego to nie działa w pierwszym sposobie.

Edytować: Wydaje się, że ma to coś wspólnego z metodą nextLine() przesuwającą wskaźnik poza bieżącą linię. Sam tego nie rozumiem, ale te linki mogą pomóc wyjaśnić trochę zamieszania:

Skaner API
Powiązany post na forum

HiRez

6 stycznia 2004
Zachodnie Stany Zjednoczone
  • 2 czerwca 2009
Zgadnę, że jeden z twoich Poprzedni wywołania read pozostawiają znak nowej linii w buforze wejściowym klawiatury. Dlatego, kiedy wywołujesz nextLine(), otrzymujesz pusty ciąg, co prowadzi do wyjątku próbującego zbadać znak na pozycji 0, ponieważ nie ma żadnego. Jest to również problem z wieloma funkcjami C wejścia konsoli. W jakiś sposób prawdopodobnie chcesz najpierw opróżnić bufor za pomocą fikcyjnego wywołania odczytu lub czegoś takiego. Dawno nie korzystałem z Javy, więc nie wiem, jaka byłaby właściwa procedura.

zgrzytacz729

Zawieszony
25 listopada 2005
  • 2 czerwca 2009
Chase R powiedział: Właśnie skończyłem pisać ten program dla mojej klasy Java. To prosty program, który oblicza, ile kosztuje montaż ogrodzenia. Na końcu pyta „czy chciałbyś dokonać innego oszacowania (T/N)”, a użytkownik powinien wybrać tak lub nie. Jednak po tym, jak skończę uruchamiać moją, nie dostanę tej opcji, po prostu mówi:

Oblicz inne oszacowanie (T/N): wyjątek w wątku „głównym” java.lang.StringIndexOutOfBoundsException: Indeks ciągu znaków poza zakresem: 0
pod adresem java.lang.String.charAt (String.java:558)
w Test1.main(Test1.java:73)

Dlaczego to robi!!!

Ponieważ masz kod źródłowy, prawdopodobnie w edytorze programów, który umożliwia wyświetlanie numerów wierszy, powinieneś być w stanie znaleźć, gdzie znajduje się wiersz 73 w pliku Test1.main. To pokaże, gdzie pojawia się problem.

Teraz masz wyjątek, który mówi, że indeks 0 jest „poza zakresem”. Jeśli masz dostęp do łańcucha zawierającego n znaków, jakie są prawidłowe indeksy?

Czy możesz nam teraz powiedzieć, w której dokładnie sytuacji indeks 0 nie jest prawidłowym indeksem?

To powinno odpowiedzieć na twoje pytanie.

CichaPanda

Emerytowany Moderator
8 paź 2002
Bambusowy Las
  • 2 czerwca 2009
gnasher729 powiedział: Ponieważ masz kod źródłowy, prawdopodobnie w edytorze programów, który może wyświetlać numery wierszy, powinieneś być w stanie znaleźć, gdzie znajduje się wiersz 73 w pliku Test1.main. To pokaże, gdzie pojawia się problem.

Linia to:

Kod: |__+_|
zaraz po tym wyświetla się „Oblicz inne oszacowanie (T/N):”