我最近开始学习 android studio,我制作了一个应用程序,显示一个数字是三角形还是正方形。问题是当用户没有将任何内容放入文本字段时,我的应用程序就会崩溃!为什么会这样?我需要更改什么?
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
class Number {
int number;
public boolean isSquare() {
double squareRoot = Math.sqrt(number);
if (squareRoot == Math.floor(squareRoot)) {
return true;
} else {
return false;
}
}
public boolean isTriangular() {
int x = 1;
int y = 1;
while (y < number) {
x++;
y = y + x;
}
if ( y == number ) {
return true;
} else {
return false;
}
}
}
public void testNumber(View view) {
String msg = "";
EditText usersNumber = (EditText) findViewById(R.id.usersNumber);
Number myNumber = new Number();
myNumber.number = Integer.parseInt(usersNumber.getText().toString());
if (usersNumber.getText().toString().isEmpty()) {
msg = myNumber.number + "Please eneter a Number!";
} else {
if (myNumber.isSquare()) {
if (myNumber.isTriangular()) {
msg = myNumber.number + "is both square and triangular!";
} else {
msg = myNumber.number + "is square but not traingular";
}
} else {
if (myNumber.isTriangular()) {
msg = myNumber.number + "is triangular but not suqare !";
} else {
msg = myNumber.number + "is neither";
}
}
}
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
如果用户没有在您的 edittext 文件中输入数字,则usersNumber.getText().toString()
返回无法作为数字配对的空白。
这就是为什么你在这个语句中得到一个异常: Integer.parseInt(usersNumber.getText().toString());
请参阅此处了解更多详情。要阻止您的应用程序崩溃,您可以try { ... } catch {...}
在代码周围使用一个块:
try {
myNumber.number = Integer.parseInt(usersNumber.getText().toString());
if (usersNumber.getText().toString().isEmpty()) {
msg = myNumber.number + "Please eneter a Number!";
} else {
if (myNumber.isSquare()) {
if (myNumber.isTriangular()) {
msg = myNumber.number + "is both square and triangular!";
} else {
msg = myNumber.number + "is square but not traingular";
}
} else {
if (myNumber.isTriangular()) {
msg = myNumber.number + "is triangular but not suqare !";
} else {
msg = myNumber.number + "is neither";
}
}
}
}catch (NumberFormatException ne){
//handle the exception
}
或者在将其解析为整数之前简单地检查 null:
if (!usersNumber.getText().toString().equals("")){
myNumber.number = Integer.parseInt(usersNumber.getText().toString());
} else {
myNumber.number = 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句