2014-11-07 7 views
0

현재 나의 목표는 분수를 파싱하고 부적절한 분수를 만드는 것입니다. 예를 들어 :분수 파싱

1_1/3 + 5/3

과 같이 콘솔에 와야한다

4/3 + 5/3

누군가가 제가 오른쪽에 갈거야 말할 수 방향과 무엇에 집중해야합니까?

import java.util.Scanner; 

public class FracCalc { 
    public static void main (String[] args) { 
     Scanner input = new Scanner(System.in); 
      System.out.println("Welcome to FracCalc"); 
      System.out.println("Type expressions with fractions, and I will evaluate them."); 

     boolean isTrue = true; 
     String in = ""; 
     while(isTrue) { 
      in = input.nextLine(); 
      if (in.equals("quit")) { 
       System.out.println("Thanks for running FracCalc!"); 
       isTrue = false; 
      }else{ 
       System.out.println("You asked me to compute" + in); 
       } 
      } 
     } 
     public static void parse(String in){ 
      int underscore = in.indexOf("_"); 
      int slash = in.lastIndexOf("/"); 

      String wholenumber = in.substring(0, underscore); 
      String numerator = in.substring(underscore + 1,slash); 
      String denominator = in.substring(slash + 1); 

      if (underscore<0 & slash<0) { 
       in = wholenumber; 
      } else if (underscore<0 & slash>0) { 
       in = in; 
      } else if (underscore>0 & slash>0) { 

      } else if (underscore>0 & slash<0) { 
       in = "Error"; 
     } 
    } 
} 
+0

나는 그 문자열을'.split ("_")'이라고 말하고 자동으로 양쪽을 한꺼번에 처리한다고합니다. – ChiefTwoPencils

+0

당신의 문제는 무엇입니까? – Tetramputechture

+0

우리는 .split ("_")에 대해 알지 못했습니다.} else if (밑줄> 0 및 슬래시> 0) {그리고 System.out.println에서도 "당신이 계산 해달라고 부탁했습니다.") 구문 분석으로 대체하려고 시도했지만 작동하지 않습니다. –

답변

0

필자의 분석에 약간 다른 접근 방식을 고려해도 분명히 올바른 방향이라고 말할 수 있습니다.

문자로 문자열을 구문 분석합니다. 문자열을 반복하고 현재 문자가 숫자이면 "currentNumber"또는 무엇인가 StringBuffer에 추가합니다. 현재 캐릭터가 숫자가 아닌 경우 수행 할 작업을 결정해야합니다. 밑줄이면 currentNumber 변수의 값이 정수 부분임을 알 수 있습니다. 그런 다음이를 별도의 변수에 저장하고 currentNumber 버퍼를 지울 수 있습니다. 현재 문자가 슬래시 문자 인 경우 currentNumber의 값이 분수의 분자임을 알 수 있습니다. 현재 문자가 공백 문자이면 무시할 수 있습니다. '+'또는 '-'인 경우 currentNumber 변수에있는 것이 분수 분모임을 알 수 있습니다. 그런 다음 심볼을 "연산자"로 별도의 변수에 저장해야합니다. 이것을 구현할 수있는 방법은 다양합니다. 예를 들어 당신은 논리를 가질 수 있습니다 : "분자에 내 값이 있고 내 분모가 아니고 현재보고있는 문자가 유효한 숫자 문자가 아닌 경우 내 분모에 모든 숫자를 추가했습니다 따라서 currentNumber 변수에 현재 내 분모가 포함되어야합니다. 따라서 currentNumber의 값을 내 분모 변수에 넣고 다음 문자로 이동하십시오. "

나는 완전히 당신을 여기에서 잃어 버리지 않았기를 바란다. .. 물론 이것은 당신이해야 할 일을 위해 너무 진전 될 수있다. 예를 들어, 입력 문자열의 형식을 지정하지 않은 경우 입력 문자열의 형식이 위에서 언급 한 형식과 항상 동일하거나 다르게 보일 수 있습니까? 정수 부분이 두 자리 수 또는 모두 건너 뛸 수 있습니까?

위에서 설명한 방법을 유한 상태 시스템이라고하며,이 기법을 사용하여 과제를 제출하면 교사는 아직 학습하지 않은 상태에서 교사에게 깊은 인상을 주어야합니다. FSM에는 많은 독서 자료가 있으므로 Google은 귀하의 친구입니다.

하지만 분명히 알 수 있습니다. 당신의 솔루션은 작동 할 것처럼 보이지만, 아마도 "동적 인"것은 아닙니다.

+0

위의 의견에서 판단 할 때, 아마도 FSM에 대해 알지 못했을 것입니다. 당신이 지금 당장 다루기에는 너무 어려울 것 같습니다. 그러나 그것은 여전히 ​​생각할 가치가있는 것입니다 ... 그리고 FSM에 대해 조금 읽으십시오. 그만한 가치가있을거야. – StFS