여기에서 마지막으로 물어 본지 얼마되지 않았습니다. 나는 안드로이드 응용 프로그램을 만드는, 그래서, 아마 여기 아주 사소한 뭔가를 놓친 거지 코드 :자바 계산식 무한 반환
Button calc = (Button) findViewById(R.id.btnCalculate);
calc.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
EditText number1 = (EditText) findViewById(R.id.dnp);
EditText number2 = (EditText) findViewById(R.id.ponte);
EditText number3 = (EditText) findViewById(R.id.aro);
EditText number4 = (EditText) findViewById(R.id.ed);
EditText number5 = (EditText) findViewById(R.id.esf);
EditText number6 = (EditText) findViewById(R.id.curvint);
EditText number7 = (EditText) findViewById(R.id.curvb);
EditText number8 = (EditText) findViewById(R.id.ind);
EditText number9 = (EditText) findViewById(R.id.espmin);
TextView display = (TextView) findViewById(R.id.display);
double dnp = Double.parseDouble(number1.getText().toString());
double ponte = Double.parseDouble(number2.getText().toString());
double aro = Double.parseDouble(number3.getText().toString());
double ed = Double.parseDouble(number4.getText().toString());
double esf = Double.parseDouble(number5.getText().toString());
double curvint = Double.parseDouble(number6.getText().toString());
double curvb = Double.parseDouble(number7.getText().toString());
double ind = Double.parseDouble(number8.getText().toString());
double espmin = Double.parseDouble(number9.getText().toString());
double R1;
double R2;
double DT; //Decentração total
double DM; //Decentração monocular
double diametro;
double S1;
double S2;
double espessurafinal;
if (esf < 0)
{
R1 = (ind - 1/curvb) * 1000;
R2 = (ind - 1/curvint) * 1000;
DT = (aro+ponte)-dnp;
DM = (DT/2);
diametro = (ed + 2 * DM)/2;
S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
espessurafinal = (S1 - S2) + espmin;
display.setText(espessurafinal + "" + "\nMilímetros");
}
else {
R1 = (ind - 1/curvb) * 1000;
R2 = (ind - 1/curvint) * 1000;
DT = (aro+ponte)-dnp;
DM = (DT/2);
diametro = (ed + 2 * DM)/2;
S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
espessurafinal = espmin - (S1 + S2);
display.setText(espessurafinal + "\nMilímetros");
}
}
});
를 실행하고, 내 코딩 기술을 이 매우 제한된 경우이 문제가 있지만있어이 코드 계산 단추를 누르면 "Infinity"를 반환합니다. 이제 NaN을 받기 전에 NaN을 없애 버렸지 만 무한하게 보일뿐입니다! 조사한 결과 숫자가 0으로 나뉘어져 있다는 것을 알았지 만 나는 그걸 보지 못했습니다 ... (오, 예, 모든 숫자가 0이 아닌지 확인했습니다)
잘못된 장소에 물건을 넣는 코딩 일 수 있습니까? (그리고 예, 나는 함수와 모든 것을 사용하여 코드를 훨씬 더 잘 만들 수 있다는 것을 알고 있습니다 ...하지만 나는 사람들을 배우고, 저에게 부드럽게 권 해드립니다).
아니면 수학이 잘못되어 극단적으로 높은 것을 반환합니까?
미리 감사드립니다.
입력 방법은 어떻습니까? –
하나의 입력 필드가 문자열을 받아 들일 수있는 것 같아요. 구문 분석 double을 사용하면 전체 문자열을 구문 분석하려고 시도합니다. – Remario
xml의 입력 내용은 모두 이와 비슷하지만 물론 다른 ID가 있습니다. 그리고 @Remario, 이제 instanceof를 실행 중입니다 ... –
Luis