내 코드에서 입력 문자열 :“”오류가 계속 발생합니다. [중복]

Nov 19 2020

내 코드에서이 오류가 계속 발생합니다. 내 parseInt () 명령과 관련이 있다고 생각하지만 확실하지 않습니다. "PUSH 5"와 같은 사용자 입력 문자열에서 오는 정수 스택을 만들고 문자열에서 5를 추출하여 스택으로 푸시하려고합니다.

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

답변

1 null_awe Nov 19 2020 at 03:14

다른 사람이 말했듯이, sc.next()오직 반환 "PUSH"하지 "PUSH 5". 제 생각에는 @Pshemo의 솔루션이 잘 작동하지만 원하는 방식이 아니라고 말했습니다. 이 경우, 당신은 대체 할 수 sc.next()와 함께 sc.nextLine()얻을 "PUSH 5". 이렇게하면 나머지 코드를 동일하게 유지할 수 있습니다.

이것이 당신이 원하는 것이기를 바랍니다!

MonsterDruide1 Nov 19 2020 at 02:55

PUSH이 줄에서와 사이의 공백을 나타냅니다 .

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

하위 문자열도 0부터 계산되기 시작하므로 substring(5);여기에서 대신 사용할 때 숫자를 구문 분석해야합니다 . 다음은 색인이있는 예입니다.

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

이것은 문자를 잡기 전에 문자열의 길이를 확인하지 않기 때문입니다.

여기:

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

그리고 여기:

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

으로 확인하십시오 ar[i].length() >= 1. 예를 들면 :

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

다른 답변에서 다루는 다른 두 가지 수정 사항도 적용해야합니다.

사용하여 sc.nextLine()입력 및 사용을 읽을 때 substring(5)경우 경우 "PUSH"에 있습니다.