2013-06-13 6 views
0

내 맞춤 방정식 계산 도구를 사용하는 데 어려움이 있습니다. 나는 문자열 파일을 (문자열 단어를 제외하고는 공백이 아님) 방정식으로 읽은 문자열을 전달할뿐만 아니라 표현하는 값에 연결되는 키워드 맵을 전달합니다. 나는 그 모든지도가 제대로 작동하는지 테스트했습니다. 아래 int 또는 문자열 관계없이 결과를 처리하기 위해 내 시도입니다. 이 두 가지 유형 만 허용됩니다. 방정식의 각면에는 하나 또는 두 개의 요소가 플러스 또는 마이너스로 구분되어있을 수 있습니다. 양측을 평가할 수있는 단 세 명의 연산자는 <,>, =입니다. 옆면은 단지 키워드 나 정수만으로 제한되어 있으므로 수족 + 1 = 힘 + 2와 같은 것을 가질 수 없습니다.맞춤 방정식 솔버 오류

이 클래스를 컴파일하려고하면 현재 오류가 발생합니다. "적절한 방법이 없습니다 parseint 메소드에 대해 ""Integer.parseInt (String, int) 메소드를 사용할 수 없습니다 ". 만약 내가이 수업을 직접적으로 편집하고 메인 수업이 아니라고 착각하지 않는다면 그것은 그러한 종류의 판단을 내리기위한지도조차 갖지 못할 것입니다. 이게 문제 야? 메인 클래스를 다시 컴파일하여 문제를 일으키는 보조 클래스 파일을 다시 컴파일하지 않은 문제가 있었기 때문에이 방법으로 컴파일하고 있습니다.

상관 예컨대 식 : 손재주> 3 배경 = 예 군단병

import java.lang.String; 
import java.util.HashMap; 
import java.util.Map; 

public class Equation { 
private String[] sides = new String[2]; 
private String[] rawEquation = new String[3]; 
private String[] parts = new String[2]; 
private String type; 
private int[] tempInt = new int[2]; 
private int[] finalSide = new int[2]; 
private String[] finalStride = new String[2]; 

public boolean solve(String equation, Map gladMap) { 
    if (equation.indexOf("<") > -1) { 
     sides = equation.split("<"); 
     rawEquation[1] = "<"; 
    } else if (equation.indexOf(">") > -1) { 
     sides = equation.split(">"); 
     rawEquation[1] = ">"; 
    } else if (equation.indexOf("=") > -1) { 
     sides = equation.split("="); 
     rawEquation[1] = "="; 
    } 
    rawEquation[0] = sides[0]; 
    rawEquation[2] = sides[1]; 
    for (int d = 0; d < 2; d++) { 
     if (sides[d].indexOf("+") > -1) { 
      parts = rawEquation[0].split("\\+"); 
      for (int a = 0; a < 2; a++) { 
       if (isInteger(parts[a])){ 
        tempInt[a] = Integer.parseInt(parts[a]); 
       } else { 
        tempInt[a] = Integer.parseInt(gladMap.get(parts[a]));    
       } 
      }  
      finalSide[d] = tempInt[0]+tempInt[1]; 
      type = "Int"; 
     } else if (rawEquation[0].indexOf("-") > -1) { 
      parts = rawEquation[0].split("\\-"); 
      for (int a = 0; a < 2; a++) { 
       if (isInteger(parts[a])){ 
        tempInt[a] = Integer.parseInt(parts[a]);   
       } else { 
        tempInt[a] = Integer.parseInt(gladMap.get(parts[a]));  
       } 
      }  
      finalSide[d] = tempInt[0]-tempInt[1]; 
      type = "Int"; 
     } else { 
      if (isInteger(sides[0])){ 
       finalSide[d] = Integer.parseInt(sides[0]);  
      } else { 
       if (isInteger(gladMap.get(sides[0]))) { 
        finalSide[d] = Integer.parseInt(gladMap.get(sides[0])); 
        type = "Int"; 
       } else { 
       finalStride[d] = gladMap.get(sides[0]); 
       type = "Str"; 
       } 
      }  


     } 
    } 
    if (rawEquation[1].equals("<")) { 
     if (type.equals("Int")) { 
      if (finalSide[0] < finalSide[1]) { 
       return true; 
      } 
     } 
    } else if (rawEquation[1].equals(">")) { 
     if (type.equals("Int")) { 
      if (finalSide[0] > finalSide[1]) { 
       return true; 
      } 
     } 
    } else { 
     if (type.equals("Int")) { 
      if (finalSide[0] == finalSide[1]) { 
       return true; 
      } 
     } else if (type.equals("Str")) { 
      if (finalStride[0].equals(finalStride[1])) { 
       return true; 
      } 
     } 
    } 

return false; 
} 
public boolean isInteger(String input) { 
    try { 
     Integer.parseInt(input); 
     return true; 
    } 
    catch(Exception NumberFormatException) { 
     return false; 
    } 
} 




} 

는 I는 gladMap.get에서있는 Integer.parseInt()을 분리하려고 (면 [0]) 임시 문자열 변수를 만들어 그러나 그것은 아무것도 바뀌지 않았습니다. 어떤 도움을 주시면 감사하겠습니다!

답변

1

여기서 전달하는지도에는 제네릭 형식이 없습니다. 따라서 get()은 항상 parseInt() 메소드에 적절한 인수가 아닌 객체를 반환합니다. 는 에러를 해결한다 공개 부울 해결 (문자열 방정식 맵 < 문자열, 문자열> gladMap) {

에있어서 서명 변경.

+0

우수. 나는 일반적인 유형과 특정 유형을 사용해야하는 시점과 장소를 둘러싼 개념을 파악하는 데 아직도 어려움을 겪고 있습니다. 몇 분 안에 답을 표시 할 것입니다. –

+1

Generics는 Java 버전 5에 추가되었습니다. 컴파일 시간의 안전성뿐만 아니라 컬렉션의 일관성을 유지하는 데 사용됩니다. 메소드가 인수로 넘겨주는 콜렉션의 내용을 채우지 못하게하는 디자인입니다. 다음 블로그는 제네릭 사용시기를 잘 이해하고 있습니다. http://javarevisited.blogspot.in/2011/09/generics-java-example-tutorial.html –

+0

도움 주셔서 감사합니다. –

0

문제는 다음과 같을 수 있습니다.지도가 형식이 지정되어 있지 않으므로 gladMap.get(sides[0]) 같은 개체가 반환됩니다. Integer.parseInt은 문자열을 기대합니다. 이것을
gladMap.get(sides[0]).toString()으로 변경할 수 있습니다.

제대로 작동해야한다고 생각합니다. 값이 실제 문자열 인 경우 toString은 자체로 반환됩니다. Integer 문자열로 변환되어 다시 구문 분석됩니다.