나는 일에 그걸 얻기 위해 몇 가지를 시도하지만 반환에 대한 답변은 매우 잘못입니다. 예를 들어, 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()
좋을 것이다.