2014-04-08 2 views
0

저는 Java를 처음 사용하고 프로그래밍에 비교적 익숙하지 않습니다. 위의 코드에서 c String이 (*, /, +, -, (,), ^) 값 중 하나를 포함하는지 확인하는 일종의 조건을 추가해야합니다. 지침 (코드 "B"로 표시된 위치)if/for 다중 문자열을위한 루프 조절

기타 관련 질문은 여기에 도움이되지 않았습니다. 아마도 나는 이것을 달성하기 위해 잘못된 도구를보고 있습니다. 나는 이걸로 무엇을 해야할지 모르겠다. if와 B 섹션을 내가 관심있는 모든 값에 대해 복사하는 것 외에는 (아주 우아한 방식이 아니라면 인정해야한다.)

도움이 많이 감사합니다!

private static void convertOnpToInf(String onp) { 
    Stack stack = new Stack(); 
    try { 
     for (int i=0; i<onp.length(); i++) {  
      String c = String.valueOf(onp.charAt(i)); 
      if (c.matches("[a-z]+")) { 
       stack.push(c); 

// B 섹션 내가 제대로 이해를 바랍니다

  } else {  
       if (stack.isEmpty()) { 
        throw new Exception("error"); 
       } 
       String a = stack.pop(); 
       if (stack.isEmpty()) { 
        throw new Exception("error"); 
       } 
       String b = stack.pop(); 


       if (addBracket(convertToOperator(c), onp, i)) { 
        stack.push("(" + b + c + a + ")"); 
       } else { 
        stack.push(b + c + a); 
       } 
+0

는이 코드를 설명 할 수 좀 더 여기에 그것을 할 수있는 2 가지 방법이 있습니다? 왜 두 번 스택을 터뜨리는거야? – Brian

+0

큰 프로그램 ( ~ 변환기)의 일부입니다 - 스택을 두 번 터뜨리는 것은 알고리즘의 일부이지만 내 문제와는 전혀 무관하다고 생각합니다. – user2746475

+0

'c '가'*, /, +, -와 같아야합니다. (,), ^', 왜 당신은 "az"에서 적어도 하나의 char에 매치하고 있습니까? – Daniel

답변

0

.

1 :

if (onp.charAt(i) == '*' || onp.charAt(i) == '+' || ...) { // all your operators 
//B 
} 

2 :

private static final Set<String> operators = new HashSet<String>(Arrays.asList("*", "+", "-")); // all your operators 

     String c = "*"; 
     if (operators.contains(c)) { 
      // B 
     } 
+0

에서 제대로 작동합니다. 고마워요! – user2746475