在Android中触摸计算器

在Android中触摸计算器,第1张

概述我正在尝试创建一个计算器设计.但我没有得到任何编译时错误.最后在运行Project /代码时出现nullpointer异常发生错误. MainActivity.java: public class MainActivity extends Activity {GridView mKeypadGrid;KeyAdapter mKeypadAdapter;private TextView use 我正在尝试创建一个计算器设计.但我没有得到任何编译时错误.最后在运行Project /代码时出现nullpointer异常发生错误.

MainActivity.java:

public class MainActivity extends Activity {GrIDVIEw mKeypadGrID;KeyAdapter mKeypadAdapter;private TextVIEw userinputText;private boolean resetinput;private boolean hasFinalResult;private String mDecimalSeperator;private Stack<String> minputStack;private Stack<String> mOperationStack;private double memoryValue;private TextVIEw mStackText;private TextVIEw memoryStatText;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main); userinputText= (TextVIEw) findVIEwByID(R.ID.txtinput);  mStackText=(TextVIEw)findVIEwByID(R.ID.txtStack); memoryStatText=(TextVIEw)findVIEwByID(R.ID.txtMemory); mKeypadGrID = (GrIDVIEw)findVIEwByID(R.ID.Grdbuttons); mKeypadAdapter = new KeyAdapter(this); mKeypadGrID.setAdapter(mKeypadAdapter); mKeypadAdapter.setonbuttonClickListener(new OnClickListener() {     @OverrIDe     public voID onClick(VIEw v) {       button btn = (button) v;       Keypadbutton keypadbutton = (Keypadbutton) btn.getTag();       ProcessKeypadinput(keypadbutton);      }}); mKeypadGrID.setonItemClickListener(new OnItemClickListener() {     public voID onItemClick(AdapterVIEw<?> parent,VIEw v,int position,long ID) {     } });} public voID ProcessKeypadinput(Keypadbutton keypadbutton) {        String text = keypadbutton.getText().toString();        String currentinput = userinputText.getText().toString();        int currentinputLen = currentinput.length();        String evalResult = null;        double userinputValue = Double.NaN;        switch (keypadbutton) {        case BACKSPACE:             if (resetinput)                return;            int endindex = currentinputLen - 1;            if (endindex < 1) {                userinputText.setText("0");            }            else {                userinputText.setText(currentinput.subSequence(0,endindex));            }            break;        case SIGN:              if (currentinputLen > 0 && currentinput != "0") {                if (currentinput.charat(0) == '-') {                    userinputText.setText(currentinput.subSequence(1,currentinputLen));                }                else {                    userinputText.setText("-" + currentinput.toString());                }            }            break;        case CE:             userinputText.setText("0");            break;        case C:            userinputText.setText("0");            clearStacks();            break;        case DECIMAL_SEP:             if (hasFinalResult || resetinput) {                userinputText.setText("0" + mDecimalSeperator);                hasFinalResult = false;                resetinput = false;            } else if (currentinput.contains("."))                return;            else                userinputText.append(mDecimalSeperator);            break;        case div:        case PLUS:        case MINUS:            case MulTIPLY:            if (resetinput) {                minputStack.pop();                mOperationStack.pop();            } else {                if (currentinputLen >0) {                    if (currentinput.charat(0) == '-') {                } else {                    if(currentinput!=null)                    minputStack.add(currentinput);                }                mOperationStack.add(currentinput);            }            }            if(text!=null){            minputStack.add(text); //132nd line            mOperationStack.add(text);            }            dumpinputStack();            evalResult = evaluateResult(false);            if (evalResult != null)                userinputText.setText(evalResult);            resetinput = true;            break;        case CALculaTE:            if (mOperationStack.size() == 0)                break;            mOperationStack.add(currentinput);            evalResult = evaluateResult(true);            if (evalResult != null) {                clearStacks();                userinputText.setText(evalResult);                resetinput = false;                hasFinalResult = true;            }            break;        case M_ADD:             userinputValue = tryParseUserinput();            if (Double.isNaN(userinputValue))                return;            if (Double.isNaN(memoryValue))                memoryValue = 0;            memoryValue += userinputValue;            displayMemoryStat();            hasFinalResult = true;            break;        case M_REMOVE:             userinputValue = tryParseUserinput();            if (Double.isNaN(userinputValue))                return;            if (Double.isNaN(memoryValue))                memoryValue = 0;            memoryValue -= userinputValue;            displayMemoryStat();            hasFinalResult = true;            break;        case MC:             memoryValue = Double.NaN;            displayMemoryStat();            break;        case MR:            if (Double.isNaN(memoryValue))                return;            userinputText.setText(doubletoString(memoryValue));            displayMemoryStat();            break;        case MS:            userinputValue = tryParseUserinput();            if (Double.isNaN(userinputValue))                return;            memoryValue = userinputValue;            displayMemoryStat();            hasFinalResult = true;            break;        default:            if (Character.isDigit(text.charat(0))) {                if (currentinput.equals("0") || resetinput || hasFinalResult) {                    userinputText.setText(text);                    resetinput = false;                    hasFinalResult = false;                } else {                    userinputText.append(text);                    resetinput = false;                }            }            break;        }    }    public voID clearStacks() {        minputStack.clear();        mOperationStack.clear();        mStackText.setText("");    }    public voID dumpinputStack() {        Iterator<String> it = minputStack.iterator();        StringBuilder sb = new StringBuilder();        while (it.hasNext()) {            CharSequence iValue = it.next();            sb.append(iValue);        }        mStackText.setText(sb.toString());    }    public String evaluateResult(boolean requestedByUser) {        if ((!requestedByUser && mOperationStack.size() != 4)                || (requestedByUser && mOperationStack.size() != 3))            return null;        String left = (String) mOperationStack.get(0);        String operator = (String) mOperationStack.get(1);        String right = (String) mOperationStack.get(2);        String tmp = null;        if (!requestedByUser)            tmp = (String) mOperationStack.get(3);        double leftVal = Double.parseDouble(left.toString());        double rightVal = Double.parseDouble(right.toString());        double result = Double.NaN;        if (operator.equals(Keypadbutton.div.getText())) {            result = leftVal / rightVal;        } else if (operator.equals(Keypadbutton.MulTIPLY.getText())) {            result = leftVal * rightVal;        } else if (operator.equals(Keypadbutton.PLUS.getText())) {            result = leftVal + rightVal;        } else if (operator.equals(Keypadbutton.MINUS.getText())) {            result = leftVal - rightVal;        }        String resultStr = doubletoString(result);        if (resultStr == null)            return null;        mOperationStack.clear();        if (!requestedByUser) {            mOperationStack.add(resultStr);            mOperationStack.add(tmp);        }        return resultStr;    }    public String doubletoString(double value) {        if (Double.isNaN(value))            return null;        long longVal = (long) value;        if (longVal == value)            return Long.toString(longVal);        else            return Double.toString(value);    }    public double tryParseUserinput() {        String inputStr = userinputText.getText().toString();        double result = Double.NaN;        try {            result = Double.parseDouble(inputStr);        } catch (NumberFormatException nfe) {}        return result;    }    public voID displayMemoryStat() {        if (Double.isNaN(memoryValue)) {            memoryStatText.setText("");        } else {            memoryStatText.setText("M = " + doubletoString(memoryValue));        }    } }

activity_main.xml中:

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:orIEntation="vertical"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent">    <TextVIEw          androID:ID="@+ID/txtStack"        androID:layout_wIDth="fill_parent"         androID:layout_height="wrap_content"         androID:textSize="15sp"        androID:gravity="right"        androID:layout_margintop = "3sp"        androID:layout_marginleft = "5sp"        androID:layout_marginRight = "5sp"/>    <TextVIEw          androID:ID="@+ID/txtinput"        androID:layout_wIDth="fill_parent"         androID:layout_height="wrap_content"         androID:textSize="25sp"        androID:gravity="right"        androID:layout_marginleft = "5sp"        androID:layout_marginRight = "5sp"/>    <TextVIEw          androID:ID="@+ID/txtMemory"        androID:layout_wIDth="fill_parent"         androID:layout_height="wrap_content"         androID:textSize="15sp"        androID:gravity="left"        androID:layout_marginleft = "5sp"        androID:layout_marginRight = "5sp"/><GrIDVIEw     androID:ID="@+ID/Grdbuttons"    androID:layout_wIDth="fill_parent"     androID:layout_height="fill_parent"    androID:columnWIDth="90dp"    androID:numColumns="5"    androID:verticalSpacing="10dp"    androID:horizontalSpacing="10dp"    androID:stretchMode="columnWIDth"    androID:gravity="center"/></linearLayout>

输出:

堆栈跟踪:

E/AndroIDRuntime(1492): FATAL EXCEPTION: main E/AndroIDRuntime(1492): Process: com.calculator,PID: 1492 E/AndroIDRuntime(1492): java.lang.NullPointerException E/AndroIDRuntime(1492): at com.calculator.MainActivity.ProcessKeypadinput(MainActivity.java:132) E/AndroIDRuntime(1492): at com.calculator.MainActivity.onClick(MainActivity.java:50) E/AndroIDRuntime(1492): at androID.vIEw.VIEw.performClick(VIEw.java:4438) E/AndroIDRuntime(1492): at androID.vIEw.VIEw$PerformClick.run(VIEw.java:18422) E/AndroIDRuntime(1492): at androID.os.Handler.handleCallback(Handler.java:733) E/AndroIDRuntime(1492): at androID.os.Handler.dispatchMessage(Handler.java:95) E/AndroIDRuntime(1492): at androID.os.Looper.loop(Looper.java:136) E/AndroIDRuntime(1492): at androID.app.ActivityThread.main(ActivityThread.java:5017) E/AndroIDRuntime(1492): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroIDRuntime(1492): at java.lang.reflect.Method.invoke(Method.java:515) E/AndroIDRuntime(1492): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) E/AndroIDRuntime(1492): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:595) E/AndroIDRuntime(1492): at dalvik.system.NativeStart.main(Native Method)

>我不知道如何修复NullPointer异常错误.
>问题在于按下
(加号),– (减号),*(mul),/(div),MC,MR,C,=(等于)和逗号按钮Logcat错误发生.其他按钮如0,1,2,3到9其罚款.
>欢迎您的回答.
>谢谢

解决方法 在onCreate中,需要为userinputText添加findVIEwByID
userinputText= (TextVIEw) findVIEwByID(R.ID.txtinput);

对于其他布局组件也是如此,否则getText()没有标识

当你这样做时,请不要在代码中为所有组件使用相同的TextVIEw ……

userinputText= (TextVIEw) findVIEwByID(R.ID.txtinput); userinputText=(TextVIEw)findVIEwByID(R.ID.txtStack);userinputText=(TextVIEw)findVIEwByID(R.ID.txtMemory);

是不正确的.

对堆栈和内存使用不同的TextVIEw ….就像stackinputText,memoryinputText

总结

以上是内存溢出为你收集整理的在Android中触摸计算器全部内容,希望文章能够帮你解决在Android中触摸计算器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1130401.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存