2016-09-09 1 views
0

목표는 너무 단순한 계산기입니다. 나는 이미 두 개의 값을 취할 수 있고 덧셈, 뺄셈 등을 할 수있는 것을 만들었지 만, 다음과 같이 사용자 입력을 읽을 수있는 것을 시도해보고 싶다 : 2 + 3 그리고 또한 3 * 4 + 5/2을 예로 들자. 나는 프로그래밍에 대한 소개 강좌를 듣고있다.사용자 입력이 두 개의 배열, 두 줄 및 문자열로 정렬되었습니다.

그래서 사용자 입력은 몇 개의 값과 몇 개의 연산 (우선 순위의 규칙이 고려되지 않는지)을 결정합니다.

나는 내부 루프를 사용하여 while 루프를 사용하여 두 개의 배열에 사용자 입력을 직접 입력 할 수 있다고 생각했다. 의사 코드에서

while (input is not quit) 
if input is a value, put in value array 
if input is symbol, put in symbol array 

지금까지 나는이 작성했습니다 :

public static void main(String[] args){ 
    Scanner sc = new Scanner(System.in); 
    String input = ""; 
    Double[] values = new Double[10]; 
    String[] symbols = new String[10]; 
    int v = 0; 
    int s = 0; 

    while (!input.equals("q")) { 
     input = sc.nextLine(); 
     if (sc.hasNextDouble()) { 
      values[v] = Double.parseDouble(input); 
      v++; 
     } else { 
      symbols[s] = input; 
      s++; 
     } 
    } 
    System.out.println(Arrays.toString(values)); 
    System.out.println(Arrays.toString(symbols)); 
} 

테스트 실행은 다음과 같이이다 : 나는 종류의 나는 Q를 누르면 너무 필요로하는지 볼 수 있습니다

2 
2 
2 
a 
b 
s 
q 
q 
[2.0, 2.0, null, null, null, null, null, null, null, null] 
[2, a, b, s, q, null, null, null, null, null] 

두 번이지만 두 개 중 하나가 문자열 배열에 들어가는 이유는 알 수 없습니다.

문자를 입력 한 후 2 자릿수를 입력하면 예외가 발생하고 프로그램이 종료됩니다.

답장을 보내 주셔서 감사합니다.

+0

이 자바입니까? 언어 태그를 추가해야합니다. – hatchet

+0

오, 죄송합니다! 사이트에 새로운 :) – IMJensen

답변

0

입력을 처리하는 방법에 대한 테스트가 다음 입력에서 앞서 결정되므로 input의 값과 테스트가 서로 다른 것입니다. 나는 이런 식으로 뭔가 좋을 것 :

bool done = false; 
while (!done) { 
    if (sc.hasNextDouble()) { 
     values[v] = Double.parseDouble(sc.nextLine()); 
     v++; 
    } else { 
     symbols[s] = sc.nextLine(); 
     if (symbols[s].equals("q")) done = true; 
     s++; 
    } 
} 

당신이 당신의 배열에 "q"를 캡처 할 이유를 잘 모르겠어요,하지만 그건 당신이 코드를 어떻게했는지 이후, 난 여기뿐만 아니라 있음을 완료했습니다. else 블록을 조금만 변경하면 배열에서 유지할 수 있습니다.

+0

정말 고마워요! 스캐너는 호기심이 많습니다. 질문은 문자 배열에 저장되어,하지만 난 다음 코드를 수정되지 않습니다 : \t \t'(완료!) { \t \t \t (sc.hasNextDouble()) { \t \t \t 경우 동안 \t verdier [v] = Double.parseDouble (sc.nextLine()); \t \t \t \t v ++; \t \t \t} {다른 경우 \t \t \t \t 심볼 [S] = sc.nextLine() (sc.hasNext ("Q")!); \t \t \t \ts ++; \t \t \t} 다른 { \t \t \t \t은 = 사실 일; \t \t \t} \t \t}' 그리고 그것이하도록되어 것처럼 작동합니다. 다시 한번 감사드립니다 :)! – IMJensen