나는 간단한 계산기를 만드는 중이라서, 그래서 나는 응용 프로그램을 만들기 위해 안드로이드 스튜디오를 사용하여 배우고 있어요,하지만 난 정답을 얻는 문제에 실행 한

콜맨 :

나는 일에 그걸 얻기 위해 몇 가지를 시도하지만 반환에 대한 답변은 매우 잘못입니다. 예를 들어, 1 + 2 = 99.0와 = 2450.0 1 * 2, 버튼 작업과 주요 방법 등 모든 내가 생각 괜찮 반환합니다. 아래는이 버튼을 클릭 같을 때 내가 문자열로 텍스트 뷰에서의 CharSequence를 변환하고하는 방식이다.

Button btnEquals = (Button)findViewById(R.id.btnEquals);
    btnEquals.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            String problem = textDisplay.getText().toString();
            double intermediate = evalProblem(problem);
            String answer = "" + intermediate;

            textDisplay.setText(answer);

        }
    });

그리고 이것은 내가 방정식을 계산하기 위해 호출하고있는 방법이다.

public static Double evalProblem(String s) {
    double output;
    double mult = 0.0;
    double add = 0.0;
    double sub = 0.0;
    double div = 0.0;

    if (s.contains("*")) {
        int x = s.indexOf("*");
        mult = s.charAt(x-1)*s.charAt(x+1);
    }
    if (s.contains("/")) {
        int x = s.indexOf("/");
        div = s.charAt(x - 1) / s.charAt(x + 1);
    }
    if (s.contains("+")) {
        int x = s.indexOf(("+"));
        add = s.charAt(x-1) + s.charAt(x+1);
    }
    if (s.contains("-")) {
        int x = s.indexOf("-");
        sub = s.charAt(x - 1) - s.charAt(x + 1);
    }


    output = mult + add + sub + div;
    return output;
}
로보 청소 :

.charAt()문자가 아닌 정수를 반환합니다. 예를 들어, "8 * 8"3 개 문자가 - '8', '*'와 '8'. 당신이 문자로 수학 연산을 수행 할 때, 문자 등의 ASCII 값을 사용 : 'A'65의 ASCII 값이 '0'48의 값을 갖는다.

따라서, '1'+ '2'= 49 + 50 = 99

당신이 바로 숫자에 '*'를하기 전에 문자열 부분을 변환 할 필요가? : 자바는 대한 쉬운 해결책이 Double.parseDouble()방법을 :

String text = "567";
int number = Double.parseDouble(text);

특정 문제를 해결하기 위해, 당신은이를 시도해야합니다 :

int x = s.indexOf('*');
mult = Double.parseDouble(s.substring(0, x)) * Double.parseDouble(s.substring(x+1));

이 솔루션의 가장 중요한 부분은 코드가 이전과 이후의 모든 걸리기 때문에 당신이 더 하나의 숫자보다가 번호를 사용할 수있는 '*'에 s, 숫자로 변환을.

편집 : U이 / markspace는 아래의 코멘트에서 언급 한 바와 같이 여기에서 볼 수 있듯이, 당신은 자바에 내장 구문 분석 라이브러리를 사용하는 것이 좋습니다 : 자바에 대한 대수 방정식 파서

편집 2 : 내가 사용 권장 한 Integer.parseInt()문자열을 숫자로 변환하는 것이 아니라 유로 / MartinZeitler 사용 double 값으로 변환, 아래의 코멘트에 지적 Double.parseDouble()좋을 것이다.

추천

출처http://43.154.161.224:23101/article/api/json?id=17267&siteId=1