Android学习日志(一)

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大致看懂,关于“=”的功能尚未了解熟悉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值