猿问

Android新手自己写的计算器代码,一进虚拟机就闪退,一个礼拜未解决,拜求各位帮助。

package com.hl.mycaculater2;


import java.util.regex.Pattern;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.GridLayout;


public class MainActivity extends Activity {

private EditText result;//设置输出文本

private static String Num = "0";//设置结果

private static String Num1 = "0";

private static String Num2 = "0";

private static int flag = 0;//标志位

public oprationType OT = null;


private int[] btOT = {R.id.btAdd,R.id.btSub,R.id.btMul,R.id.btDiv};

private Button[] BTOT = new Button[btOT.length];//创建四个操作按键


private int[] btID = {R.id.bt0,R.id.bt1,R.id.bt2,R.id.bt3,R.id.bt4,

R.id.bt5,R.id.bt6,R.id.bt7,R.id.bt8,R.id.bt9,R.id.btPoi};

private Button[] BTID = new Button[btID.length];//创建数字按键

private GridLayout gly;

    @Override

        protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        

        gly = (GridLayout) findViewById(R.layout.activity_main);

        

        result = (EditText) findViewById(R.id.result);

        result.setText("0");

        result.setEnabled(false);

        

        GetNumber get = new GetNumber();

        for(int i=0;i<btID.length;i++){

        BTID[i] = (Button)findViewById(btID.length);

        BTID[i].setOnClickListener(get);

        if(get == null){

        Log.i("tag", " 'get' is null ");

        }

        }

        

        GetOpType getOT = new GetOpType();

        for(int i=0;i<btID.length;i++){

        BTOT[i] = (Button)findViewById(btOT.length);

        BTOT[i].setOnClickListener(getOT);

        if(getOT == null){

        Log.i("tag", " 'getOT' is null ");

        }

        }

        

        Button btEqual = (Button) findViewById(R.id.btEqu);//设置等号键

        btEqual.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

if (flag == 0) {  

   Num2 = result.getText().toString();  

   if (OT == oprationType.Div && Num2.equals("0")) {  

   result.setText("0不能为被除数");  

   } else {  

   Num = OT.Values(Num1, Num2);  

   Num1 = Num;  

   Num2 = "0";  

   result.setText(Num);  

   flag = 1;  

   gly.setBackgroundResource(R.drawable.ic_launcher);  

   }  

   }

}

});

       

   Button btClean = (Button)findViewById(R.id.btCle);//设置清屏键

   btClean.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

}

});

       

       Button btDelete = (Button)findViewById(R.id.btDel);//设置删除键

       btDelete.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

}

});

       

       

   }

   class GetNumber implements OnClickListener {//设置输出显示

   @Override

   public void onClick(View v) {

   // TODO Auto-generated method stub

   if(flag == 1){

   Num = "0";

   }

   if(Num.equals("0")){

   result.setText("");

   Num = v.getId() == R.id.btPoi ? "0":"";//????

   }

   String txt = ((Button) v).getText().toString();  

           boolean s = Pattern.matches("-*(\\d+).?(\\d)*", Num + txt);  

           Num = s ? (Num + txt) : Num;  

           gly.setBackgroundResource(R.drawable.ic_launcher);  

           result.setText(Num);  

   }  

   }

   class GetOpType implements OnClickListener{//设置操作跳转

   @Override

   public void onClick(View v) {

   // TODO Auto-generated method stub

   Num1 = result.getText().toString();

   switch (v.getId()) {

   case R.id.btAdd:

   OT = oprationType.Add;

   break;

   case R.id.btSub:

   OT = oprationType.Sub;

   break;

   case R.id.btMul:

   OT = oprationType.Mul;

   break;

   case R.id.btDiv:

   OT = oprationType.Div;

   break;

   default:

   break;

   }

   Num = "0";

   flag = 0;

   gly.setBackgroundResource(R.drawable.ic_launcher);

   }

  

   }

   @Override

   public boolean onCreateOptionsMenu(Menu menu) {

       // Inflate the menu; this adds items to the action bar if it is present.

       getMenuInflater().inflate(R.menu.main, menu);

       return true;

   }

   @Override

   public boolean onOptionsItemSelected(MenuItem item) {

       // Handle action bar item clicks here. The action bar will

       // automatically handle clicks on the Home/Up button, so long

       // as you specify a parent activity in AndroidManifest.xml.

       int id = item.getItemId();

       if (id == R.id.action_settings) {

           return true;

       }

       return super.onOptionsItemSelected(item);

   }

}


三声蘸酱
浏览 4266回答 5
5回答

Icurse

我的也闪退  求教 为什么

木流深

不好意思,我想请问下怎么解决闪退问题的,我的也闪退

三声蘸酱

已经解决,谢谢大家

三声蘸酱

新手看不懂的报错信息

三声蘸酱

oprationType.javapackage com.hl.mycaculater2;import java.math.BigDecimal;public enum oprationType { Add,Sub,Mul,Div; public String Values(String number1,String number2) { BigDecimal num1 = new BigDecimal(number1); BigDecimal num2 = new BigDecimal(number2); BigDecimal num = BigDecimal.valueOf(0); switch (this) { case Add: num = num1.add(num2); break; case Sub: num = num1.subtract(num2); break; case Mul: num = num1.multiply(num2); break; case Div: num = num1.divide(num2); break; } return num.stripTrailingZeros().toString(); }}
随时随地看视频慕课网APP

相关分类

Android
Java
我要回答