有 Java 编程相关的问题?

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

java逻辑在某个地方出错,试图从1100到1100之间的用户处获取输入

我正在做一个计算器,这部分我很难理解。我想让用户输入的输入值只在数字1-100之间。然后,获取该值并在公式中使用它。 我的逻辑有问题,我需要帮助找出我做错了什么。我使用的是Java,不是Kotlin

    package com.example.rvbtcal;

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

import 安卓x.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {


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

        TextView inputMoles = (EditText) findViewById(R.id.txtMoles);
        EditText inputML = (EditText) findViewById(R.id.txtmL);
        EditText inputG = (EditText) findViewById(R.id.txtG);
        TextView outputAnswer = (TextView) findViewById(R.id.txtAnswer);
        Button btnCalculate = (Button) findViewById(R.id.btnCalculate);


        Spinner spinner = (Spinner) findViewById(R.id.spnN);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.arrayN, 安卓.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(安卓.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        double iM = Double.parseDouble(inputMoles.getText().toString());
        double iML = Double.parseDouble(inputML.getText().toString());
        double ioA = Double.parseDouble(inputG.getText().toString());
        double textN = Double.parseDouble(spinner.getSelectedItem().toString());
        
        if (ioA >= 0 || ioA <= 101){
            Toast.makeText(MainActivity.this,"Enter a number between 1-100", Toast.LENGTH_SHORT);
        }

        btnCalculate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                double Answer1 = (iM * iML * textN) / (ioA / 1000);
                double FinalAnswer=(Answer1*1000000);
                outputAnswer.setText(String.format("%.3f",FinalAnswer));
                // String FinalAnswer2=String.valueOf(FinalAnswer);
                // outputAnswer.setText(FinalAnswer2);


            }
        });

    }
}

我现在有下面这样的代码,但是,即使使用If语句,仍然会进行计算。我尝试了else语句,但是无论输入g的数字是否在参数范围内,答案都是空白的

           package com.example.rvbtcal;

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

import 安卓x.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {


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

        TextView inputMoles = (EditText) findViewById(R.id.txtMoles);
        EditText inputML = (EditText) findViewById(R.id.txtmL);
        EditText inputG = (EditText) findViewById(R.id.txtG);
        TextView outputAnswer = (TextView) findViewById(R.id.txtAnswer);
        Button btnCalculate = (Button) findViewById(R.id.btnCalculate);

        Spinner spinner = (Spinner) findViewById(R.id.spnN);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.arrayN, 安卓.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(安卓.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        btnCalculate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                double iM = Double.parseDouble(inputMoles.getText().toString());
                double iML = Double.parseDouble(inputML.getText().toString());
                double ioA = Double.parseDouble(inputG.getText().toString());
                double textN = Double.parseDouble(spinner.getSelectedItem().toString());

                if (ioA < 0 || ioA > 100) {
                    Toast.makeText(MainActivity.this, "Enter a number between 1-100", Toast.LENGTH_SHORT);
                }
                    double Answer1 = (iM * iML * textN) / (ioA / 1000);
                    double FinalAnswer = (Answer1 * 1000000);
                    outputAnswer.setText(String.format("%.3f", FinalAnswer));




            }
        });

    }
}

我为将来可能会遇到这种情况的其他人编写的最后代码是成品(目前):

package com.example.rvbtcal;

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

import 安卓x.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {


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

        TextView inputMoles = (EditText) findViewById(R.id.txtMoles);
        EditText inputML = (EditText) findViewById(R.id.txtmL);
        EditText inputG = (EditText) findViewById(R.id.txtG);
        TextView outputAnswer = (TextView) findViewById(R.id.txtAnswer);
        Button btnCalculate = (Button) findViewById(R.id.btnCalculate);

        Spinner spinner = (Spinner) findViewById(R.id.spnN);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.arrayN, 安卓.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(安卓.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        btnCalculate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                double iM = Double.parseDouble(inputMoles.getText().toString());
                double iML = Double.parseDouble(inputML.getText().toString());
                double ioA = Double.parseDouble(inputG.getText().toString());
                double textN = Double.parseDouble(spinner.getSelectedItem().toString());

                if (ioA <= 0 || ioA > 100) {
                    Toast.makeText(MainActivity.this, "Enter a number between 1-100", Toast.LENGTH_LONG).show();
                    outputAnswer.setText("");
                    return;
                }
                    double Answer1 = (iM * iML * textN) / (ioA / 1000);
                    double FinalAnswer = (Answer1 * 1000000);
                    outputAnswer.setText(String.format("%.3f",FinalAnswer));

            }
        });

    }
}

共 (1) 个答案

  1. # 1 楼答案

    您需要将以下行移到btnCalculate.setOnClickListener

    double iM = Double.parseDouble(inputMoles.getText().toString());
    double iML = Double.parseDouble(inputML.getText().toString());
    double ioA = Double.parseDouble(inputG.getText().toString());
    double textN = Double.parseDouble(spinner.getSelectedItem().toString());
        
    if (ioA < 1 || ioA > 100) {
        Toast.makeText(MainActivity.this,"Enter a number between 1-100", Toast.LENGTH_SHORT).show();
        return;
    }
    

    您需要在用户点击btnCalculate之后获取用户输入,因为在那里您可以获取用户的最新输入

    您所做的是在创建EditText视图后立即获取值。因此,它返回一个空字符串。当您试图将空字符串传递给double时,它会给您一个异常。除非为XML中的EditText指定了文本值