有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何计算键入的唯一EditText?

好的,我正在尝试制作一个非常简单的应用程序,让我计算8个EditText的平均值,现在我希望它不会崩溃,只计算输入了数字的EditText,只要输入的EditText只有7个或更少。我一直试图用If条件来实现这一点,但每当我故意不填充最后一个EditText时,应用程序就会崩溃。我该如何阻止它崩溃

我的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<安卓x.constraintlayout.widget.ConstraintLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
tools:context=".MainActivity">

<EditText
    安卓:id="@+id/sub"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/sub1"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/sub1"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="20dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/sub2"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/sub"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/sub4"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/sub2"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/sub5"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/sub4"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/sub6"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/sub5"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/sub7"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/sub6"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/sub8"
    安卓:layout_width="140dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="20dp"
    安卓:layout_marginLeft="20dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    app:fontFamily="sans-serif-black"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/sub7"
    tools:ignore="LabelFor"
    安卓:inputType="text" />

<EditText
    安卓:id="@+id/num"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="20dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub1"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="LabelFor"/>

<EditText
    安卓:id="@+id/num1"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub"
    app:layout_constraintTop_toBottomOf="@+id/num"
    tools:ignore="LabelFor"/>

<EditText
    安卓:id="@+id/num2"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub2"
    app:layout_constraintTop_toBottomOf="@+id/num1"
    tools:ignore="LabelFor"/>

<EditText
    安卓:id="@+id/num3"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub4"
    app:layout_constraintTop_toBottomOf="@+id/num2"
    tools:ignore="LabelFor"/>

<EditText
    安卓:id="@+id/num4"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub5"
    app:layout_constraintTop_toBottomOf="@+id/num3"
    tools:ignore="LabelFor"/>

<EditText
    安卓:id="@+id/num5"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub6"
    app:layout_constraintTop_toBottomOf="@+id/num4"
    tools:ignore="LabelFor"/>

<EditText
    安卓:id="@+id/num6"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub7"
    app:layout_constraintTop_toBottomOf="@+id/num5"
    tools:ignore="LabelFor" />

<EditText
    安卓:id="@+id/num7"
    安卓:layout_width="60dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="30dp"
    安卓:layout_marginLeft="30dp"
    安卓:layout_marginTop="10dp"
    安卓:importantForAutofill="no"
    安卓:ems="10"
    安卓:inputType="numberDecimal"
    安卓:textColor="#000000"
    app:layout_constraintStart_toEndOf="@+id/sub8"
    app:layout_constraintTop_toBottomOf="@+id/num6"
    tools:ignore="LabelFor"/>

<Button
    安卓:id="@+id/btnAvr"
    安卓:layout_width="80dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="180dp"
    安卓:layout_marginLeft="180dp"
    安卓:layout_marginTop="12dp"
    安卓:text="@string/get_average"
    安卓:textSize="12sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tvAnswer" />

<TextView
    安卓:id="@+id/tvAnswer"
    安卓:layout_width="90dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginStart="168dp"
    安卓:layout_marginLeft="170dp"
    安卓:layout_marginTop="40dp"
    安卓:text="@string/average"
    安卓:textColor="#000000"
    安卓:textSize="14sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/num7" />

</安卓x.constraintlayout.widget.ConstraintLayout>

我的Java代码:

package com.example.cardmkii;

import 安卓x.appcompat.app.AppCompatActivity;

import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.TextView;

public class MainActivity extends AppCompatActivity {

private EditText sub;
private EditText sub1;
private EditText sub2;
private EditText sub4;
private EditText sub5;
private EditText sub6;
private EditText sub7;
private EditText sub8;
private EditText numb;
private EditText numb1;
private EditText numb2;
private EditText numb3;
private EditText numb4;
private EditText numb5;
private EditText numb6;
private EditText numb7;
private Button average;
private TextView result;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    sub = (EditText) findViewById(R.id.sub);
    sub1 = (EditText) findViewById(R.id.sub1);
    sub2 = (EditText) findViewById(R.id.sub2);
    sub4 = (EditText) findViewById(R.id.sub4);
    sub5 = (EditText) findViewById(R.id.sub5);
    sub6 = (EditText) findViewById(R.id.sub6);
    sub7 = (EditText) findViewById(R.id.sub7);
    sub8 = (EditText) findViewById(R.id.sub8);
    numb = (EditText) findViewById(R.id.num);
    numb1 = (EditText) findViewById(R.id.num1);
    numb2 = (EditText) findViewById(R.id.num2);
    numb3 = (EditText) findViewById(R.id.num3);
    numb4 = (EditText) findViewById(R.id.num4);
    numb5 = (EditText) findViewById(R.id.num5);
    numb6 = (EditText) findViewById(R.id.num6);
    numb7 = (EditText) findViewById(R.id.num7);
    average = (Button) findViewById(R.id.btnAvr);
    result = (TextView) findViewById(R.id.tvAnswer);

    average.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            double number = Double.parseDouble(numb.getText().toString());
            double number1 = Double.parseDouble(numb1.getText().toString());
            double number2 = Double.parseDouble(numb2.getText().toString());
            double number3 = Double.parseDouble(numb3.getText().toString());
            double number4 = Double.parseDouble(numb4.getText().toString());
            double number5 = Double.parseDouble(numb5.getText().toString());
            double number6 = Double.parseDouble(numb6.getText().toString());
            double number7 = Double.parseDouble(numb7.getText().toString());
            if (numb.length() > 0 && numb1.length() > 0 && numb2.length() > 0 && numb3.length() > 0 && numb4.length() > 0 && numb5.length() > 0 && numb6.length() > 0 && numb7.length() > 0){
                double average = (number + number1 + number2 + number3 + number4 + number5 + number6 + number7)/8;
                result.setText("Answer: " + String.valueOf(average));
            } else if (numb.length() > 0 && numb1.length() > 0 && numb2.length() > 0 && numb3.length() > 0 && numb4.length() > 0 && numb5.length() > 0 && numb6.length() > 0 && numb7.length() == 0){
                double average = (number + number1 + number2 + number3 + number4 + number5 + number6 + number7)/7;
                result.setText("Answer: " + String.valueOf(average));
            }
        }
    });
}
}

共 (3) 个答案

  1. # 1 楼答案

    你的错误在这一部分:

    if (numb.length() > 0 && numb1.length() > 0 && numb2.length() > 0 && numb3.length() > 0 && numb4.length() > 0 && numb5.length() > 0 && numb6.length() > 0 && numb7.length() > 0){
        double average = (number + number1 + number2 + number3 + number4 + number5 + number6 + number7)/8;
        result.setText("Answer: " + String.valueOf(average));
    } else if (numb.length() > 0 && numb1.length() > 0 && numb2.length() > 0 && numb3.length() > 0 && numb4.length() > 0 && numb5.length() > 0 && numb6.length() > 0 && numb7.length() == 0){
        double average = (number + number1 + number2 + number3 + number4 + number5 + number6 + number7)/7;
        result.setText("Answer: " + String.valueOf(average));
    }
    

    您正在使用numbnumb1等。。变量来检查长度。它是EditText的一个对象,所以它不会给出你所键入内容的长度

    您可以检查所有number、number1、number2等的值是否大于零

    Bonus: If you want double values from each EditText then You should check first that values are not empty. If the values of EditText is empty and you will parse with Double then it will crash your app.

    希望你明白我的意思

  2. # 2 楼答案

    首先,让我们消除一个崩溃源,它是由试图解析空字符串引起的。对于读取号码的每个位置,替换

    double number = Double.parseDouble(numb.getText().toString());
    

    try {
        double number = numb.getText().toString().isEmpty() ? 0 : Double.parseDouble(numb.getText().toString()) ;
    } catch ( NumberFormatException e ) {
        // text not a number
    }
    

    接下来,您需要跟踪有多少EditText实际解析了其中的值。这样就不会扭曲你的平均值,这是微不足道的

  3. # 3 楼答案

    你的应用程序崩溃,因为你正在呼叫double number7 = Double.parseDouble(numb7.getText().toString());

    所以numb7.getText().toString())这是parseDouble的参数,应该是

    在运行时,一定要在double中解析,但当您将任何edittext留空时,结果是空字符串或null,这显然不是double,因此您的应用程序会崩溃

    NumberFormatExceptionIllegalArgumentException我不记得了,在进行任何解析之前,您应该检查所有edittext是否都有一个双精度值

    类似于if(num*.getText().toString().trim() != null & !num*.getText().toString.trim().equals("") )

    number7 = Double.parseDouble(numb7.getText().toString());