首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >逻辑不在某处,试图从1-100之间的用户获取输入

逻辑不在某处,试图从1-100之间的用户获取输入
EN

Stack Overflow用户
提问于 2021-10-06 16:08:06
回答 1查看 41关注 0票数 2

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

代码语言:javascript
运行
复制
    package com.example.rvbtcal;

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

import androidx.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, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.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的数字是否在参数范围内,结果都是空的。

代码语言:javascript
运行
复制
           package com.example.rvbtcal;

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

import androidx.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, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.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));




            }
        });

    }
}

我的最终代码是给将来可能会为此而苦苦挣扎的其他人,这里是最终的产品(目前):

代码语言:javascript
运行
复制
package com.example.rvbtcal;

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

import androidx.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, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.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));

            }
        });

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-06 16:19:16

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

代码语言:javascript
运行
复制
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视图后立即获取该值。因此它返回一个空字符串。当你试图传递一个空字符串给双精度时,它会给你一个异常。除非您已将文本值分配给XML中的EditText。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69469093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档