在指向正确的方向以了解视图和布局后,我能够制作出一个我觉得非常好的计算器。我添加了一些非常基本的代码,它远非优雅,但我希望通过制作一个简单的应用程序来获得我的壮举。到目前为止,它只说过程已停止并再次尝试。我100%肯定这是我的代码而不是我的ui让这件事发生。我之前用1个按钮制作了一个基本的按钮计数器,但是现在有15个按钮,我想我搞砸了。
以下是名为hellocats的计算器代码(我正在学习基础教程并继续添加)
package com.hellocats;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
public class hellokatz extends Activity {
/** Called when the activity is first created. */
int numbermover = 0;
int[] numbers ={0,0};
String sign = "+";
int answer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button button0 = (Button)findViewById(R.id.button0);
final Button button1 = (Button)findViewById(R.id.button1);
final Button button2 = (Button)findViewById(R.id.button2);
final Button button3 = (Button)findViewById(R.id.button3);
final Button button4 = (Button)findViewById(R.id.button4);
final Button button5 = (Button)findViewById(R.id.button5);
final Button button6 = (Button)findViewById(R.id.button6);
final Button button7 = (Button)findViewById(R.id.button7);
final Button button8 = (Button)findViewById(R.id.button8);
final Button button9 = (Button)findViewById(R.id.button9);
final Button addbutton = (Button)findViewById(R.id.buttonadd);
final Button subbutton = (Button)findViewById(R.id.buttonsub);
final Button mulbutton = (Button)findViewById(R.id.buttonmul);
final Button divbutton = (Button)findViewById(R.id.buttondiv);
final Button equalsbutton = (Button)findViewById(R.id.buttonequals);
final EditText num1 = (EditText)findViewById(R.id.num1);
final EditText mysign = (EditText)findViewById(R.id.sign);
final EditText num2 = (EditText)findViewById(R.id.num2);
final EditText answer = (EditText)findViewById(R.id.answer);
num1.setText(numbers[0]);
num2.setText(numbers[1]);
mysign.setText(sign);
button0.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 0;
}
});
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 1;
}
});
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 2;
}
});
button3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 3;
}
});
button4.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 4;
}
});
button5.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 5;
}
});
button6.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 6;
}
});
button7.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 7;
}
});
button8.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 8;
}
});
button9.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
numbers[numbermover] = 9;
}
});
}
}
这是布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content" android:layout_width="match_parent">
<Button android:text=" 1 " android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 2 " android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 3 " android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 4 " android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 5 " android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 6 " android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 7 " android:id="@+id/button7" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</TableRow>
<TableRow android:id="@+id/tableRow2" android:layout_height="wrap_content" android:layout_width="match_parent">
<Button android:text=" 8 " android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 9 " android:id="@+id/button9" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" 0 " android:id="@+id/button0" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</TableRow>
<TableRow android:id="@+id/tableRow3" android:layout_height="wrap_content" android:layout_width="match_parent">
<Button android:text=" + " android:id="@+id/buttonadd" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" - " android:id="@+id/buttonsub" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" X " android:id="@+id/buttonmul" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" / " android:id="@+id/buttondiv" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text=" = " android:id="@+id/buttonequals" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</TableRow>
<TableRow android:id="@+id/tableRow4" android:layout_height="wrap_content" android:layout_width="match_parent">
<EditText android:text=" " android:id="@+id/num1" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
<EditText android:text=" " android:id="@+id/sign" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
<EditText android:text=" " android:id="@+id/num2" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
<EditText android:text=" = " android:id="@+id/equals" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
<EditText android:text=" " android:id="@+id/answer" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
</TableRow>
</LinearLayout>
我在java文件中做错了什么,如何修复并从中学习?
谢谢:Aslo我对你的网站很新,到目前为止还无法弄清楚如何发布main.xml文件。我试过CTRL + K和CTRL + V来过去,到目前为止没什么
答案 0 :(得分:3)
您的数组int[] numbers ={0,0};
的类型为int
。
EditText
接受CharSequence
,所以我的猜测是它会在下面的一行引发错误:
num1.setText(numbers[0]);
尝试类似的操作(如果有效,请更新num2
和mysign
):
num1.setText(Integer.toString(numbers[0]));
正如GrAnd所指出的,setText
也接受代表int
的{{1}}。它无法找到id为0的字符串并抛出错误。
答案 1 :(得分:0)
package com.example.showoff;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.text.method.DigitsKeyListener;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView edittest1;
Button one, two, three, four, five, six, seven, eight, nine, zero, add, sub, mul, div, cancel, equal;
ArrayList<Float> math = new ArrayList<Float>();
float m1;
float m2;
float temp;
int currentOperation = 0;
int nextOperation;
final static int ADD = 1;
final static int SUBTRACT = 2;
final static int MULTIPLY =3;
final static int DIVISION = 4;
final static int EQUALS = 0;
final static int CLEAR = 1;
final static int DONT_CLEAR = 0;
int clearDisplay = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edittest1 = (TextView) findViewById(R.id.edittest1);
one =(Button) findViewById(R.id.btnNum1Id);
two =(Button) findViewById(R.id.btnNum2Id);
three =(Button) findViewById(R.id.btnNum3Id);
four =(Button) findViewById(R.id.btnNum4Id);
five =(Button) findViewById(R.id.btnNum5Id);
six =(Button) findViewById(R.id.btnNum6Id);
seven =(Button) findViewById(R.id.btnNum7Id);
eight =(Button) findViewById(R.id.btnNum8Id);
nine =(Button) findViewById(R.id.btnNum9Id);
zero =(Button) findViewById(R.id.btnNum0Id);
add =(Button) findViewById(R.id.btnNumAddId);
sub =(Button) findViewById(R.id.btnNumSubId);
mul =(Button) findViewById(R.id.btnNumMulId);
div =(Button) findViewById(R.id.btnNumDivId);
cancel =(Button) findViewById(R.id.btnNumClearId);
equal =(Button) findViewById(R.id.btnNumEqualId);
edittest1.setKeyListener(DigitsKeyListener.getInstance(true,true));
registerListeners();
}
private void registerListeners() {
// TODO Auto-generated method stub
one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("1");
}
});
two.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("2");
}
});
three.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("3");
}
});
four.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("4");
}
});
five.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("5");
}
});
six.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("6");
}
});
seven.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("7");
}
});
eight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("8");
}
});
nine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("9");
}
});
zero.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearDisplay == CLEAR) {
edittest1.setText("");
}
clearDisplay = DONT_CLEAR;
edittest1.append("0");
}
});
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(ADD);
}
}
);
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(SUBTRACT);
}
});
mul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(MULTIPLY);
}
});
div.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(DIVISION);
}
});
equal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(EQUALS);
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edittest1.setText("0");
m1 = 0;
m2 = 0;
math.removeAll(math);
currentOperation = 0;
nextOperation = 0;
}
});
}
private void calcLogic(int operator){
math.add(Float.parseFloat(edittest1.getText().toString()));
if (operator != EQUALS) {
nextOperation = operator;
}
else if (operator == EQUALS){
nextOperation = 0;
//operator=' ';
}
switch (currentOperation) {
case ADD:
m1 = math.get(0);
m2 = math.get(1);
math.removeAll(math);
math.add(m1 + m2);
edittest1.setText(String.format("%.3f", math.get(0)));
break;
case SUBTRACT:
m1 = math.get(0);
m2 = math.get(1);
math.removeAll(math);
math.add(m1 - m2);
edittest1.setText(String.format("%.3f", math.get(0)));
break;
case MULTIPLY:
m1 = math.get(0);
m2 = math.get(1);
math.removeAll(math);
math.add(m1 * m2);
edittest1.setText(String.format("%.3f", math.get(0)));
break;
case DIVISION:
m1 = math.get(0);
m2 = math.get(1);
math.removeAll(math);
math.add(m1 / m2);
edittest1.setText(String.format("%.3f", math.get(0)));
break;
}
clearDisplay = CLEAR;
currentOperation = nextOperation;
if (operator == EQUALS) {
m1 = 0;
m2 = 0;
math.removeAll(math);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}