我正在制作一个简单的计算器,作为我的第一个应用程序,我有两个EditTexts
,如果我按下应用程序崩溃的 4 个计算按钮中的任何一个,我已经设置了一个 toast 消息来显示 EditText1 & amp;EditText2 是空的,如果没有根据按下的按钮进行计算...我该如何防止它崩溃?
public class MainActivity extends Activity {
EditText number1text;
EditText number2text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number1text = (EditText) findViewById(R.id.num1text);
number2text = (EditText) findViewById(R.id.num2text);
}
public void calcadd(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{
}
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text + num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}
public void calcminus(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{
}
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text - num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}
public void calcdivide(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{
}
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text / num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}
public void calcmultiply(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{
}
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text * num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { // here
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
这是我的 activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/num1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/num1"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<EditText
android:id="@+id/num1text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num1"
android:layout_below="@+id/num1"
android:ems="10"
android:inputType="number"
>
<requestFocus />
</EditText>
<TextView
android:id="@+id/num2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num1text"
android:layout_below="@+id/num1text"
android:text="@string/num2"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<EditText
android:id="@+id/num2text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num2"
android:layout_below="@+id/num2"
android:ems="10"
android:inputType="number"
/>
<TextView
android:id="@+id/ans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num2text"
android:layout_below="@+id/num2text"
android:layout_marginTop="52dp"
android:text="@string/anstxt"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<Button
android:id="@+id/on1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num2text"
android:layout_below="@+id/num2text"
android:text="@string/btnadd"
android:onClick="calcadd"/>
<Button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/on1"
android:layout_alignBottom="@+id/on1"
android:layout_toRightOf="@+id/on1"
android:text="@string/btnminus"
android:onClick="calcminus"/>
<Button
android:id="@+id/on2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/Button01"
android:layout_alignBottom="@+id/Button01"
android:layout_toRightOf="@+id/Button01"
android:text="@string/btnmultiply"
android:onClick="calcmultiply"/>
<Button
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/on2"
android:layout_alignBottom="@+id/on2"
android:layout_toRightOf="@+id/on2"
android:text="@string/btndivide"
android:onClick="calcdivide"/>
</RelativeLayout>
else{
}
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text + num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
你在 else {} 语句之外做你的工作,你正在检查它们是否为空,这很好,但是如果它们是空的“”,你仍然尝试通过在 else 括号之外进行计算。
else{
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text + num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}
即使这不是你目前的问题
还要确保在除法函数中检查您没有除以 0:Integer ans = num1text / num2text;
您可以简化代码创建一个函数,该函数执行当前在每个函数中重复的事情(DRY;不要重复自己)
@ 1:例如,通过在除法函数中添加另一个 if / else:
public void calcdivide(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
if (num2text>0)
{
//only do the division if divisor > 0
Integer ans = num1text / num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}
else
{
//e.g. show a toastmessage here
}
}
}
在您测试 EditTexts 为空的所有四个 if 结构中,更改以下内容:
else{
}
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text + num2text; // +, -, * or / depending
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
为此(代码需要在else
块中):
else{
Integer num1text = Integer.pInt(number1text.getText().toString());
Integer num2text = Integer.pInt(number2text.getText().toString());
Integer ans = num1text + num2text;
TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}
此外,在每个 Toast 中,将getBaseContext()
更改为getApplicationContext()
。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(58条)