2017.07.17——2017.07.20
重点:《第一行代码》:第一章全部,2.1,2.2,2.3,3.1,3.2.2,3.2.3,3.3
任务:做一个计算器。
《第一行代码》:
1.AndroidMainfest.xml
所有的活动,四大组件在其中注册。
2.app/java/MainActivity
@Override
public class MainActiviyt extends AppCompatActivity
{
protected void onCreate(Bundle savedInstanceState);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
注解:
1.extend和implements区别:extend继承父类,implements实现接口;
2.AppCompatActivity:Activity是Android系统提供的一个活动基类,项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性(AppCompatActivity是Activity的子类)
3.Bundle savedInstanceState:点击home,意外退出回收时,用户再次打开应用时能恢复到原来的状态。
4.savedInstanceState参数 保存Activity结束前的状态。.
5.super与this:this是自身的一个对象,代表对象本身:指向对身本身的一个指针
super指向最近父类(超类)的一个指针。
可以引用构造方法
6.setContentView(R.layout.activity_main):将活动引入activity_main布局
7.res/layout中的xml文件用来布局。
8.@Override:一种注解,在你不留心重载而并非覆写了该方法时,编译器就会生成一条错误信息
3.XML文件中
引用id:@id/id_name
定义id:@+id/id_name
4.活动:一种可以包含用户界面的组件
5.import:输入类文件——使用类文件方法和变量
6.监听器:
setOnClickListener(this):
setOnClickListener代表设置事件处理的监听器,this代表所在的类,implements OnClickListener就代表实现监听器接口,public
void onClick(View v)函数代表事件处理函数,点击startButton按钮会进入onClick函数。
以下为计算器代码:
app/src/main/res/layout/activity_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/button0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/button_add"
android:layout_toEndOf="@+id/button_add" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:layout_above="@+id/button5"
android:layout_toRightOf="@+id/button5"
android:layout_toEndOf="@+id/button5" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"
android:layout_alignBaseline="@+id/button5"
android:layout_alignBottom="@+id/button5"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/button_multiply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*"
android:layout_alignBaseline="@+id/button3"
android:layout_alignBottom="@+id/button3"
android:layout_toRightOf="@+id/button3"
android:layout_toEndOf="@+id/button3" />
<Button
android:id="@+id/button_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CE"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/button9"
android:layout_toEndOf="@+id/button9" />
<Button
android:id="@+id/button7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="7"
android:layout_alignBaseline="@+id/button8"
android:layout_alignBottom="@+id/button8"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:layout_above="@+id/button4"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/button_minus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/button0"
android:layout_toEndOf="@+id/button0" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_toRightOf="@+id/button4"
android:layout_toEndOf="@+id/button4" />
<Button
android:id="@+id/button8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8"
android:layout_alignBaseline="@+id/button9"
android:layout_alignBottom="@+id/button9"
android:layout_toRightOf="@+id/button_add"
android:layout_toEndOf="@+id/button_add" />
<Button
android:id="@+id/button_equal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="
android:layout_alignBaseline="@+id/button9"
android:layout_alignBottom="@+id/button9"
android:layout_toRightOf="@+id/button9"
android:layout_toEndOf="@+id/button9" />
<Button
android:id="@+id/button9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9"
android:layout_above="@+id/button0"
android:layout_toRightOf="@+id/button0"
android:layout_toEndOf="@+id/button0" />
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6"
android:layout_above="@+id/button8"
android:layout_toRightOf="@+id/button5"
android:layout_toEndOf="@+id/button5" />
<Button
android:id="@+id/button_divide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"
android:layout_alignBaseline="@+id/button6"
android:layout_alignBottom="@+id/button6"
android:layout_toRightOf="@+id/button3"
android:layout_toEndOf="@+id/button3" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
android:layout_alignBaseline="@+id/button6"
android:layout_alignBottom="@+id/button6"
android:layout_toRightOf="@+id/button4"
android:layout_toEndOf="@+id/button4" />
<EditText
android:id="@+id/et_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Type the number here."
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
app/src/main/java/MainAcvitity
package activitytest.example.com.calculater;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button button1, button2, button3, button4, button5, button6, button7, button8,
button9, button_add,button_minus, button_multiply, button_divide, button_equal, button_clear
; //各个按钮
TextView et_input;
StringBuilder pending = new StringBuilder();
private void initView(){
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
button5 = (Button) findViewById(R.id.button5);
button6= (Button) findViewById(R.id.button6);
button7= (Button) findViewById(R.id.button7);
button8= (Button) findViewById(R.id.button8);
button9=(Button) findViewById(R.id.button9);
button_add= (Button) findViewById(R.id.button_add);
button_minus= (Button) findViewById(R.id.button_minus);
button_multiply= (Button) findViewById(R.id.button_multiply);
button_clear= (Button) findViewById(R.id.button_clear);
button_divide= (Button) findViewById(R.id.button_divide);
button_equal= (Button) findViewById(R.id.button_equal);
//设置监听器
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
button5.setOnClickListener(this);
button6.setOnClickListener(this);
button7.setOnClickListener(this);
button8.setOnClickListener(this);
button9.setOnClickListener(this);
button_equal.setOnClickListener(this);
button_divide.setOnClickListener(this);
button_clear.setOnClickListener(this);
button_minus.setOnClickListener(this);
button_multiply.setOnClickListener(this);
button_add.setOnClickListener(this);
et_input = (TextView) findViewById(R.id.et_input);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void onClick(View v) {
int last = 0;
if(pending.length()!=0)
{
last = pending.codePointAt(pending.length()-1);
}
switch (v.getId()) {
case R.id.button0:
pending = pending.append("0");
et_input.setText(pending);
break;
case R.id.button1:
pending = pending.append("1");
et_input.setText(pending);
break;
case R.id.button2:
pending = pending.append("2");
et_input.setText(pending);
break;
case R.id.button3:
pending = pending.append("3");
et_input.setText(pending);
break;
case R.id.button4:
pending = pending.append("4");
et_input.setText(pending);
break;
case R.id.button5:
pending = pending.append("5");
et_input.setText(pending);
break;
case R.id.button6:
pending = pending.append("6");
et_input.setText(pending);
break;
case R.id.button7:
pending = pending.append("7");
et_input.setText(pending);
break;
case R.id.button8:
pending = pending.append("8");
et_input.setText(pending);
break;
case R.id.button9:
pending = pending.append("9");
et_input.setText(pending);
break;
case R.id.button_add:
if (last >= '0' && last <= '9' ) {
pending = pending.append("+");
}
et_input.setText(pending);
break;
case R.id.button_minus:
if (last >= '0' && last <= '9') {
pending = pending.append("-");
}
et_input.setText(pending);
break;
case R.id.button_multiply:
if (last >= '0' && last <= '9' ) {
pending = pending.append("*");
}
et_input.setText(pending);
break;
case R.id.button_divide:
if (last >= '0' && last <= '9' ) {
pending = pending.append("/");
}
et_input.setText(pending);
break;
case R.id.button_clear:
pending = pending.delete(0, pending.length());
et_input.setText(pending);
break;
case R.id.button_equal:
if ((pending.length() > 1)) {
InfixInToDuffix inf = new InfixInToDuffix();
String jieguo;
try {
String a = inf.toSuffix(pending);
jieguo = inf.dealEquation(a);
} catch (Exception ex) {
jieguo = "出错";
}
et_input.setText(pending + "=" + jieguo);
pending =
pending.delete(0, pending.length());
if (Character.isDigit(jieguo.charAt(0))) {
pending = pending.append(jieguo);
}
}
break;
default:
break;
}
}
}
app/src/main/java/InfixlnToDuffix
package activitytest.example.com.calculater;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.lang.*;
import java.util.ArrayList;
import java.util.*;
public class InfixInToDuffix {
private static final Map<Character,Integer>basic =new HashMap<Character, Integer>();
static {
basic.put('-',1);
basic.put('+', 1);
basic.put('*', 2);
basic.put('/', 2);
basic.put('(', 0);
}
//将中缀表达式转换为后缀表达式
public String toSuffix(StringBuilder infix){
List<String> queue = new ArrayList<String>();
List<Character> stack = new ArrayList<Character>();
char[] charArr = infix.substring(0,infix.length()).trim().toCharArray();
String standard = "*/+-()";
char ch = '&';
int len = 0;
for (int i = 0; i < charArr.length; i++) {
ch = charArr[i];
if(Character.isDigit(ch)) {
len++;
}else if(ch == '.'){
len++;
}else if(standard.indexOf(ch) != -1) {
if(len > 0) {
queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len, i)));
len = 0;
}
if(ch == '(') {
stack.add(ch);
continue;
}
if (!stack.isEmpty()) {
int size = stack.size() - 1;
boolean flag = false;
while (size >= 0 && ch == ')' && stack.get(size) != '(') {
queue.add(String.valueOf(stack.remove(size)));
size--;
flag = true;
}
if(ch==')'&&stack.get(size) == '('){
flag = true;
}
while (size >= 0 && !flag && basic.get(stack.get(size)) >= basic.get(ch)) {
queue.add(String.valueOf(stack.remove(size)));
size--;
}
}
if(ch != ')') {
stack.add(ch);
} else {
stack.remove(stack.size() - 1);
}
}
if(i == charArr.length - 1) {
if(len > 0) {
queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len+1, i+1)));
}
int size = stack.size() - 1;
while (size >= 0) {
queue.add(String.valueOf(stack.remove(size)));
size--;
}
}
}
String a = queue.toString();
return a.substring(1,a.length()-1);
}
public String dealEquation(String equation){
String [] arr = equation.split(", ");
List<String> list = new ArrayList<String>();
for (int i = 0; i < arr.length; i++) {
int size = list.size();
switch (arr[i]) {
case "+": double a = Double.parseDouble(list.remove(size-2))+ Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(a)); break;
case "-": double b = Double.parseDouble(list.remove(size-2))- Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(b)); break;
case "*": double c = Double.parseDouble(list.remove(size-2))* Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(c)); break;
case "/": double d = Double.parseDouble(list.remove(size-2))/ Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(d)); break;
default: list.add(arr[i]); break;
}
}
return list.size()
== 1 ? list.get(0) : "运算失败" ;
}
}
不足之处:
1.布局的各按钮文字显示应该用rescource。
2.主要是借鉴了别人的代码,MainAcvitity大致看懂,关于“=”的功能尚未了解熟悉。