내 코드에서 입력 문자열 :“”오류가 계속 발생합니다. [중복]
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"에 있습니다.