Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓计算器应用程序在单击操作员时强制关闭';被点击_Java_Android_Android Studio - Fatal编程技术网

Java 安卓计算器应用程序在单击操作员时强制关闭';被点击

Java 安卓计算器应用程序在单击操作员时强制关闭';被点击,java,android,android-studio,Java,Android,Android Studio,我是一名应用程序开发新手,目前我偶然发现了一个问题,即每当点击任何操作员时,应用程序都会崩溃。如果我对运算符使用catch异常,则该值将在TextView中显示NaN 任何专业知识或反馈都将不胜感激 下面是来自logcat的错误: --------- beginning of crash E/AndroidRuntime: FATAL EXCEPTION: main Process: com.math.fundamentalmath, PID: 3619 java.lang.NullPointe

我是一名应用程序开发新手,目前我偶然发现了一个问题,即每当点击任何操作员时,应用程序都会崩溃。如果我对运算符使用catch异常,则该值将在TextView中显示NaN

任何专业知识或反馈都将不胜感激

下面是来自logcat的错误:

--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.math.fundamentalmath, PID: 3619
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
    at com.math.fundamentalmath.CalculatorFragment.compute(CalculatorFragment.java:62)
    at com.math.fundamentalmath.CalculatorFragment.access$000(CalculatorFragment.java:16)
    at com.math.fundamentalmath.CalculatorFragment$17.onClick(CalculatorFragment.java:231)
    at android.view.View.performClick(View.java:7125)
    at android.view.View.performClickInternal(View.java:7102)
    at android.view.View.access$3500(View.java:801)
    at android.view.View$PerformClick.run(View.java:27336)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;

    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentTransaction;

    public class CalculatorFragment extends Fragment {

    private TextView show,result;
    private Button b_square,b_square_root,b_delete,b_reset,b_9,b_8,b_7,b_6,b_5,b_4,b_3,b_2,b_1,b_0,b_dot,b_div,b_mul,b_min,b_plus,b_equal;
    private final char ADDITION = '+';
    private final char SUBTRACTION = '-';
    private final char MULTIPLICATION = '*';
    private final char DIVISION = '/';
    private final char EQU = '0';
    private final char SQR = '²';
    private final char SQRT = '√';
    private double val1 = Double.NaN;
    private double val2;
    private char ACTION;


    private void compute() {
        if (!Double.isNaN(val1)) {
            val2 = Double.parseDouble(show.getText().toString());

                switch (ACTION){
                    case ADDITION:
                        val1 = val1 + val2;
                        break;
                    case SUBTRACTION:
                        val1 = val1 - val2;
                        break;
                    case MULTIPLICATION:
                        val1 = val1 * val2;
                        break;
                    case DIVISION:
                        val1 = val1 / val2;
                        break;
                    case SQR:
                        val1 = Math.pow(val1,2);
                        break;
                    case SQRT:
                        val1 = Math.sqrt(val1);
                        break;
                    case EQU:
                        break;
                }
            }
                else{
                    val2 = Double.parseDouble(show.getText().toString());
                }
        }

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_calculator, container, false);


            final TextView show = (TextView ) v.findViewById(R.id.show);
            final TextView result = (TextView ) v.findViewById(R.id.result);

            final Button b_square = (Button) v.findViewById(R.id.b_square);
            final Button b_square_root = (Button) v.findViewById(R.id.b_square_root);
            final Button b_delete = (Button) v.findViewById(R.id.b_delete);
            final Button b_reset = (Button) v.findViewById(R.id.b_reset);
            final Button b_9 = (Button) v.findViewById(R.id.b_9);
            final Button b_8 = (Button) v.findViewById(R.id.b_8);
            final Button b_7 = (Button) v.findViewById(R.id.b_7);
            final Button b_6 = (Button) v.findViewById(R.id.b_6);
            final Button b_5 = (Button) v.findViewById(R.id.b_5);
            final Button b_4 = (Button) v.findViewById(R.id.b_4);
            final Button b_3 = (Button) v.findViewById(R.id.b_3);
            final Button b_2 = (Button) v.findViewById(R.id.b_2);
            final Button b_1 = (Button) v.findViewById(R.id.b_1);
            final Button b_0 = (Button) v.findViewById(R.id.b_0);
            final Button b_dot = (Button) v.findViewById(R.id.b_dot);
            final Button b_div = (Button) v.findViewById(R.id.b_div);
            final Button b_mul = (Button) v.findViewById(R.id.b_mul);
            final Button b_min = (Button) v.findViewById(R.id.b_min);
            final Button b_plus = (Button) v.findViewById(R.id.b_plus);
            final Button b_equal = (Button) v.findViewById(R.id.b_equal);


            b_square.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = SQR;
                    result.setText(String.valueOf(val1) + "²");
                    show.setText(null);
                }
            });

            b_square_root.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = SQRT;
                    result.setText(String.valueOf(val1) + "√");
                    show.setText(null);
                }
            });

            b_delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(show.getText().length()>0){
                        CharSequence name = show.getText().toString();
                        show.setText(name.subSequence(0, name.length()-1));
                    }
                    else{
                        val1 = Double.NaN;
                        val2 = Double.NaN;
                        show.setText(null);
                        result.setText(null);
                    }
                }
            });

            b_reset.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FragmentTransaction fragmentTransaction1 = getFragmentManager().beginTransaction();
                    fragmentTransaction1.replace(R.id.fragment_container,new CalculatorFragment());
                    fragmentTransaction1.addToBackStack(null);
                    fragmentTransaction1.commit();
                }
            });

            b_9.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "9");
                }
            });

            b_8.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "8");
                }
            });

            b_7.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "7");
                }
            });

            b_6.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "6");
                }
            });

            b_5.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "5");
                }
            });

            b_4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "4");
                }
            });

            b_3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "3");
                }
            });

            b_2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "2");
                }
            });

            b_1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "1");
                }
            });

            b_0.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "0");
                }
            });

            b_dot.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + ".");
                }
            });

            b_div.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = DIVISION;
                    result.setText(String.valueOf(val1) + "/");
                    show.setText(null);
                }
            });

            b_mul.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = MULTIPLICATION;
                    result.setText(String.valueOf(val1) + "X");
                    show.setText(null);
                }
            });

            b_min.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = SUBTRACTION;
                    result.setText(String.valueOf(val1) + "-");
                    show.setText(null);
                }
            });

            b_plus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = ADDITION;
                    result.setText(String.valueOf(val1) + "+");
                    show.setText(null);
                }
            });

            b_equal.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = EQU;
                    result.setText(result.getText().toString() + String.valueOf(val2) + "=");
                    show.setText(null);
                }
            });

        return v;
    }
}
下面的源代码:

--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.math.fundamentalmath, PID: 3619
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
    at com.math.fundamentalmath.CalculatorFragment.compute(CalculatorFragment.java:62)
    at com.math.fundamentalmath.CalculatorFragment.access$000(CalculatorFragment.java:16)
    at com.math.fundamentalmath.CalculatorFragment$17.onClick(CalculatorFragment.java:231)
    at android.view.View.performClick(View.java:7125)
    at android.view.View.performClickInternal(View.java:7102)
    at android.view.View.access$3500(View.java:801)
    at android.view.View$PerformClick.run(View.java:27336)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;

    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentTransaction;

    public class CalculatorFragment extends Fragment {

    private TextView show,result;
    private Button b_square,b_square_root,b_delete,b_reset,b_9,b_8,b_7,b_6,b_5,b_4,b_3,b_2,b_1,b_0,b_dot,b_div,b_mul,b_min,b_plus,b_equal;
    private final char ADDITION = '+';
    private final char SUBTRACTION = '-';
    private final char MULTIPLICATION = '*';
    private final char DIVISION = '/';
    private final char EQU = '0';
    private final char SQR = '²';
    private final char SQRT = '√';
    private double val1 = Double.NaN;
    private double val2;
    private char ACTION;


    private void compute() {
        if (!Double.isNaN(val1)) {
            val2 = Double.parseDouble(show.getText().toString());

                switch (ACTION){
                    case ADDITION:
                        val1 = val1 + val2;
                        break;
                    case SUBTRACTION:
                        val1 = val1 - val2;
                        break;
                    case MULTIPLICATION:
                        val1 = val1 * val2;
                        break;
                    case DIVISION:
                        val1 = val1 / val2;
                        break;
                    case SQR:
                        val1 = Math.pow(val1,2);
                        break;
                    case SQRT:
                        val1 = Math.sqrt(val1);
                        break;
                    case EQU:
                        break;
                }
            }
                else{
                    val2 = Double.parseDouble(show.getText().toString());
                }
        }

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_calculator, container, false);


            final TextView show = (TextView ) v.findViewById(R.id.show);
            final TextView result = (TextView ) v.findViewById(R.id.result);

            final Button b_square = (Button) v.findViewById(R.id.b_square);
            final Button b_square_root = (Button) v.findViewById(R.id.b_square_root);
            final Button b_delete = (Button) v.findViewById(R.id.b_delete);
            final Button b_reset = (Button) v.findViewById(R.id.b_reset);
            final Button b_9 = (Button) v.findViewById(R.id.b_9);
            final Button b_8 = (Button) v.findViewById(R.id.b_8);
            final Button b_7 = (Button) v.findViewById(R.id.b_7);
            final Button b_6 = (Button) v.findViewById(R.id.b_6);
            final Button b_5 = (Button) v.findViewById(R.id.b_5);
            final Button b_4 = (Button) v.findViewById(R.id.b_4);
            final Button b_3 = (Button) v.findViewById(R.id.b_3);
            final Button b_2 = (Button) v.findViewById(R.id.b_2);
            final Button b_1 = (Button) v.findViewById(R.id.b_1);
            final Button b_0 = (Button) v.findViewById(R.id.b_0);
            final Button b_dot = (Button) v.findViewById(R.id.b_dot);
            final Button b_div = (Button) v.findViewById(R.id.b_div);
            final Button b_mul = (Button) v.findViewById(R.id.b_mul);
            final Button b_min = (Button) v.findViewById(R.id.b_min);
            final Button b_plus = (Button) v.findViewById(R.id.b_plus);
            final Button b_equal = (Button) v.findViewById(R.id.b_equal);


            b_square.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = SQR;
                    result.setText(String.valueOf(val1) + "²");
                    show.setText(null);
                }
            });

            b_square_root.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = SQRT;
                    result.setText(String.valueOf(val1) + "√");
                    show.setText(null);
                }
            });

            b_delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(show.getText().length()>0){
                        CharSequence name = show.getText().toString();
                        show.setText(name.subSequence(0, name.length()-1));
                    }
                    else{
                        val1 = Double.NaN;
                        val2 = Double.NaN;
                        show.setText(null);
                        result.setText(null);
                    }
                }
            });

            b_reset.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FragmentTransaction fragmentTransaction1 = getFragmentManager().beginTransaction();
                    fragmentTransaction1.replace(R.id.fragment_container,new CalculatorFragment());
                    fragmentTransaction1.addToBackStack(null);
                    fragmentTransaction1.commit();
                }
            });

            b_9.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "9");
                }
            });

            b_8.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "8");
                }
            });

            b_7.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "7");
                }
            });

            b_6.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "6");
                }
            });

            b_5.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "5");
                }
            });

            b_4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "4");
                }
            });

            b_3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "3");
                }
            });

            b_2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "2");
                }
            });

            b_1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "1");
                }
            });

            b_0.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + "0");
                }
            });

            b_dot.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.setText(show.getText().toString() + ".");
                }
            });

            b_div.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = DIVISION;
                    result.setText(String.valueOf(val1) + "/");
                    show.setText(null);
                }
            });

            b_mul.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = MULTIPLICATION;
                    result.setText(String.valueOf(val1) + "X");
                    show.setText(null);
                }
            });

            b_min.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = SUBTRACTION;
                    result.setText(String.valueOf(val1) + "-");
                    show.setText(null);
                }
            });

            b_plus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = ADDITION;
                    result.setText(String.valueOf(val1) + "+");
                    show.setText(null);
                }
            });

            b_equal.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    compute();
                    ACTION = EQU;
                    result.setText(result.getText().toString() + String.valueOf(val2) + "=");
                    show.setText(null);
                }
            });

        return v;
    }
}

您在类的开头定义所有视图,然后从不分配它们。您正在
onCreateView
中创建全新的视图,但试图在
compute()
中访问它们
compute()
无权访问这些,它只能访问(未分配的)类级别的

您应该设置一个值,而不是重新定义
show
。因此,替换
final TextView show=(TextView)v.findViewById(R.id.show)
show=(TextView)v.findViewById(R.id.show)


我不打算对整个代码做太多评论,但您可能需要深入研究。此外,考虑是否可以编写相同的代码<强>曾经< /强>,而不是用一个字符更改了10次。p> 您使用调试器发现了什么?