Ciągle pojawia się błąd W przypadku ciągu wejściowego: „” w moim kodzie [duplikat]
Ciągle otrzymuję ten błąd w moim kodzie. Myślę, że ma to związek z moim poleceniem parseInt (), ale nie jestem pewien. Próbuję utworzyć stos liczb całkowitych pochodzących z ciągu wejściowego użytkownika, takiego jak „PUSH 5”, i po prostu wyodrębnić 5 z ciągu, aby umieścić je na stosie.
import java.util.*;
public class lab6
{
public static void main(String []args)
{
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
lab6stack theStack = new lab6stack(size);
String [] ar = new String [size];
for(int i = 0; i < size; i++)
{
ar[i] = sc.next();
if(ar[i].charAt(1) == 'U')
{
String sub = ar[i].substring(4);
int num = Integer.parseInt(sub);
theStack.push(num);
}
else if(ar[i].charAt(1) == 'O')
{
theStack.pop();
}
}
while (!theStack.isEmpty())
{
System.out.println(theStack.pop());
}
}
}
Odpowiedzi
Jak powiedzieli inni, sc.next()
tylko wraca "PUSH"
, a nie "PUSH 5"
. Moim zdaniem rozwiązanie @ Pshemo działa dobrze, ale powiedziałeś, że nie tak chcesz to zrobić. W takim przypadku można zastąpić sc.next()
z sc.nextLine()
dostać "PUSH 5"
. W ten sposób resztę kodu możesz zachować bez zmian.
Mam nadzieję, że tego chcesz!
Odnosisz się do spacji między PUSH
a numerem w tym wierszu:
String sub = ar[i].substring(4);
Ponieważ podciągi również zaczynają liczyć od zera, twoja liczba powinna zostać przeanalizowana podczas używania substring(5);
tutaj zamiast. Oto przykład z indeksami:
"P"=0 ; "U"=1 ; "S"=2 ; "H"=3 ; " "=4 ; "3"=5
Dzieje się tak, ponieważ nie sprawdzasz długości łańcucha przed przechwyceniem znaku.
tutaj:
if(ar[i].charAt(1) == 'U')
i tu:
else if(ar[i].charAt(1) == 'O')
Sprawdź z ar[i].length() >= 1
. Na przykład:
if(ar[i].length() >= 1 && ar[i].charAt(1) == 'U')
Konieczne będzie również zastosowanie dwóch pozostałych poprawek opisanych w innych odpowiedziach.
Używaj sc.nextLine()
podczas odczytywania wejścia i używaj substring(5)
w przypadku "PUSH".