Immer wieder den Fehler Für Eingabezeichenfolge: "" in meinem Code [Duplikat]

Nov 19 2020

Ich erhalte diesen Fehler immer wieder in meinem Code. Ich denke, es hat mit meinem Befehl parseInt () zu tun, bin mir aber nicht sicher. Ich versuche, einen Stapel von Ganzzahlen zu erstellen, die aus einer Benutzereingabezeichenfolge wie "PUSH 5" stammen, und extrahiere einfach die 5 aus der Zeichenfolge, um sie in den Stapel zu verschieben.

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());
        }
    }
}

Antworten

1 null_awe Nov 19 2020 at 03:14

Wie andere gesagt haben, sc.next()kehrt nur zurück "PUSH", nicht "PUSH 5". Meiner Meinung nach funktioniert die Lösung von @ Pshemo einwandfrei, aber Sie sagten, dass es nicht so ist, wie Sie es tun möchten. In diesem Fall können Sie Ihre sc.next()durch ersetzen sc.nextLine(), um zu erhalten "PUSH 5". Auf diese Weise können Sie den Rest Ihres Codes beibehalten.

Hoffe das ist was du willst!

MonsterDruide1 Nov 19 2020 at 02:55

Sie beziehen sich auf das Leerzeichen zwischen PUSHund Ihre Nummer in dieser Zeile:

String sub = ar[i].substring(4);

Da Teilzeichenfolgen ebenfalls mit Null zählen, sollte Ihre Nummer analysiert werden, wenn Sie sie substring(5);stattdessen hier verwenden. Hier ist ein Beispiel mit Indizes:

"P"=0 ; "U"=1 ; "S"=2 ; "H"=3 ; " "=4 ; "3"=5
JohnMercier Nov 19 2020 at 03:59

Dies liegt daran, dass Sie die Länge der Zeichenfolge nicht überprüfen, bevor Sie das Zeichen greifen.

Hier:

if(ar[i].charAt(1) == 'U')

und hier:

else if(ar[i].charAt(1) == 'O')

Überprüfen Sie mit ar[i].length() >= 1. Zum Beispiel:

if(ar[i].length() >= 1 && ar[i].charAt(1) == 'U')

Sie müssen auch die beiden anderen Korrekturen anwenden, die in den anderen Antworten behandelt werden.

Verwenden Sie diese Option, sc.nextLine()wenn Sie die Eingabe lesen, und verwenden Sie sie substring(5)im Fall "PUSH".