结果显示为无穷大
Result appearing as infinity
我的计算结果显示为无穷大时出现一些问题。
基本上,有一个用于用户输入的 Edittext 和两个单选按钮。克和盎司。
当用户输入他们的 edittext/serving 尺寸时,我需要 运行 根据单选按钮选择进行计算。
如果选择克单选按钮,我需要文本视图显示“1000/Servingsize”的结果
如果选择了盎司单选按钮,我需要文本视图来显示结果“(1000 / (servingsize * 28.3495) )
我已经放了我最近两次尝试的代码,我也试过其他代码,但是昨晚很晚,我记不起来了。
如能提供任何帮助,我们将不胜感激。
干杯,杰西。
工作部分(结果按预期显示):
package com.example.jess.dogfeedingguide;
import...
public class kCals extends AppCompatActivity {
EditText firstNumber;
EditText secondNumber;
EditText thirdNumber;
EditText servingsize;
TextView addResult;
TextView addResult2;
Button btnAdd;
Button btnAdd2;
RadioButton grradio, ozradio;
double num1, num2, num3, serve, servefinalg, servefinaloz, serve2, ozinkg, sum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_k_cals);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
this.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
servingsize = (EditText) findViewById(R.id.txtNumber4);
firstNumber = (EditText) findViewById(R.id.txtNumber1);
secondNumber = (EditText) findViewById(R.id.txtNumber2);
thirdNumber = (EditText) findViewById(R.id.txtNumber3);
btnAdd = (Button) findViewById(R.id.btnAdd);
addResult = (TextView) findViewById(R.id.txtResult);
grradio = (RadioButton) findViewById(R.id.radioButton1);
ozradio = (RadioButton) findViewById(R.id.radioButton2);
btnAdd2 = (Button) findViewById(R.id.btnAdd2);
addResult2 = (TextView) findViewById(R.id.txtResult2);
btnAdd.setOnClickListener(new View.OnClickListener()
// Perform kCals Per Serve Calculation //
// Check for Blank Values //
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
return 0.00;
}
}
// Calculation //
public void onClick(View v) {
num1 = parseDouble(firstNumber.getText().toString());
num2 = parseDouble(secondNumber.getText().toString());
num3 = parseDouble(thirdNumber.getText().toString());
sum = (num1 * 4) + (num2 * 4) + (num3 * 9);
addResult.setText(String.format("%.2f", sum));
}
});
}
非工作部分(从上面的部分开始,结果无限):
// Perform kCals Per Kilogram Calculation //
// Check for Blank Values //
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
return 0.00;
}
}
// Calculation //
public void onRadioButtonClicked(View view) {
int kg = 1000;
ozinkg = 28.3495;
serve = parseDouble(servingsize.getText().toString());
serve2 = serve * ozinkg;
double servefinalg = (double) kg / serve;
double servefinaloz = (double) kg / serve2;
String stservefinalg = Double.toString(servefinalg);
String stservefinaloz = Double.toString(servefinaloz);
boolean checked = ((RadioButton) view).isChecked();
switch (view.getId()) {
case R.id.radioButton1:
if (checked) {
addResult2.setText(stservefinalg);
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;
case R.id.radioButton2:
if (checked) {
addResult2.setText(stservefinaloz);
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;}
}
}
}
我也尝试了以下方法:
// Perform kCals Per Kilogram Calculation //
// Check for Blank Values //
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
// do something if invalid number maybe also return 0?
return 0.00;
}
}
// Calculation //
public void onRadioButtonClicked(View view) {
ozinkg = 28.3495;
serve = parseDouble(servingsize.getText().toString());
servefinalg = 1000.00 / serve;
servefinaloz = 1000.00 / (serve * 28.3495);
boolean checked = ((RadioButton) view).isChecked();
switch (view.getId()) {
case R.id.radioButton1:
if (checked) {
addResult2.setText(String.format("%.2f", servefinalg));
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;
case R.id.radioButton2:
if (checked) {
addResult2.setText(String.format("%.2f", servefinaloz));
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;
}
}
}
serve = parseDouble(servingsize.getText().toString());
很可能是导致问题的原因。
获得无穷大的主要方法是除以零。
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
// do something if invalid number maybe also return 0?
return 0.00;
}
}
在抛出异常或输入为空的情况下返回零。
因为文本是一串字符,你需要一些东西来解析成double/integer。
在它为空或抛出异常的情况下(这是正在发生的情况,因为它是一串字符,而不是数字),它 returns 为零。
servefinalg = 1000.00 / serve;
是除以发球,由serve = parseDouble(servingsize.getText().toString());
设定。
您的 parseDouble 方法将其赋值为零,然后除以零。
我的解决方案是改用乘法,将除数更改为分数,这样如果输入无效,它就会被设置为零而不是无穷大。
我的计算结果显示为无穷大时出现一些问题。
基本上,有一个用于用户输入的 Edittext 和两个单选按钮。克和盎司。
当用户输入他们的 edittext/serving 尺寸时,我需要 运行 根据单选按钮选择进行计算。
如果选择克单选按钮,我需要文本视图显示“1000/Servingsize”的结果
如果选择了盎司单选按钮,我需要文本视图来显示结果“(1000 / (servingsize * 28.3495) )
我已经放了我最近两次尝试的代码,我也试过其他代码,但是昨晚很晚,我记不起来了。
如能提供任何帮助,我们将不胜感激。
干杯,杰西。
工作部分(结果按预期显示):
package com.example.jess.dogfeedingguide;
import...
public class kCals extends AppCompatActivity {
EditText firstNumber;
EditText secondNumber;
EditText thirdNumber;
EditText servingsize;
TextView addResult;
TextView addResult2;
Button btnAdd;
Button btnAdd2;
RadioButton grradio, ozradio;
double num1, num2, num3, serve, servefinalg, servefinaloz, serve2, ozinkg, sum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_k_cals);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
this.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
servingsize = (EditText) findViewById(R.id.txtNumber4);
firstNumber = (EditText) findViewById(R.id.txtNumber1);
secondNumber = (EditText) findViewById(R.id.txtNumber2);
thirdNumber = (EditText) findViewById(R.id.txtNumber3);
btnAdd = (Button) findViewById(R.id.btnAdd);
addResult = (TextView) findViewById(R.id.txtResult);
grradio = (RadioButton) findViewById(R.id.radioButton1);
ozradio = (RadioButton) findViewById(R.id.radioButton2);
btnAdd2 = (Button) findViewById(R.id.btnAdd2);
addResult2 = (TextView) findViewById(R.id.txtResult2);
btnAdd.setOnClickListener(new View.OnClickListener()
// Perform kCals Per Serve Calculation //
// Check for Blank Values //
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
return 0.00;
}
}
// Calculation //
public void onClick(View v) {
num1 = parseDouble(firstNumber.getText().toString());
num2 = parseDouble(secondNumber.getText().toString());
num3 = parseDouble(thirdNumber.getText().toString());
sum = (num1 * 4) + (num2 * 4) + (num3 * 9);
addResult.setText(String.format("%.2f", sum));
}
});
}
非工作部分(从上面的部分开始,结果无限):
// Perform kCals Per Kilogram Calculation //
// Check for Blank Values //
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
return 0.00;
}
}
// Calculation //
public void onRadioButtonClicked(View view) {
int kg = 1000;
ozinkg = 28.3495;
serve = parseDouble(servingsize.getText().toString());
serve2 = serve * ozinkg;
double servefinalg = (double) kg / serve;
double servefinaloz = (double) kg / serve2;
String stservefinalg = Double.toString(servefinalg);
String stservefinaloz = Double.toString(servefinaloz);
boolean checked = ((RadioButton) view).isChecked();
switch (view.getId()) {
case R.id.radioButton1:
if (checked) {
addResult2.setText(stservefinalg);
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;
case R.id.radioButton2:
if (checked) {
addResult2.setText(stservefinaloz);
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;}
}
}
}
我也尝试了以下方法:
// Perform kCals Per Kilogram Calculation //
// Check for Blank Values //
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
// do something if invalid number maybe also return 0?
return 0.00;
}
}
// Calculation //
public void onRadioButtonClicked(View view) {
ozinkg = 28.3495;
serve = parseDouble(servingsize.getText().toString());
servefinalg = 1000.00 / serve;
servefinaloz = 1000.00 / (serve * 28.3495);
boolean checked = ((RadioButton) view).isChecked();
switch (view.getId()) {
case R.id.radioButton1:
if (checked) {
addResult2.setText(String.format("%.2f", servefinalg));
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;
case R.id.radioButton2:
if (checked) {
addResult2.setText(String.format("%.2f", servefinaloz));
addResult2.setEnabled(true);
} else {
addResult2.setEnabled(false);
}
break;
}
}
}
serve = parseDouble(servingsize.getText().toString());
很可能是导致问题的原因。
获得无穷大的主要方法是除以零。
public double parseDouble(String doubleText) {
if (TextUtils.isEmpty(doubleText)) {
return 0.00;
}
try {
return Double.parseDouble(doubleText);
} catch (NumberFormatException e) {
// do something if invalid number maybe also return 0?
return 0.00;
}
}
在抛出异常或输入为空的情况下返回零。
因为文本是一串字符,你需要一些东西来解析成double/integer。
在它为空或抛出异常的情况下(这是正在发生的情况,因为它是一串字符,而不是数字),它 returns 为零。
servefinalg = 1000.00 / serve;
是除以发球,由serve = parseDouble(servingsize.getText().toString());
设定。
您的 parseDouble 方法将其赋值为零,然后除以零。
我的解决方案是改用乘法,将除数更改为分数,这样如果输入无效,它就会被设置为零而不是无穷大。