Android App中的条件语句无法按预期工作

时间:2019-03-02 23:10:14

标签: java android

我目前正在尝试根据用户在下拉菜单中选择的内容添加条件。如果选择了第一项,则textView上输入的数据将被乘以34,否则第二项将被乘以18。到目前为止,我可以测试第一个选择是否可以正常工作,但是不会选择第二个选择。有人可以向我解释解决这种情况的正确方法吗?这就是我的代码的样子。

public class CatalinaFerryTickets extends AppCompatActivity{
    String[] ferryRoutes = new String[]{"To Catalina Island", "To Long Beach"};
    private Button renderBtn;
    EditText handleData;
    TextView displayData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
//      RENDER SPINNER TO DEVICE

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_catalina_ferry_tickets);
        final Spinner spin=findViewById(R.id.mySpinner);
        final ArrayAdapter<String> myAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, ferryRoutes);
        spin.setAdapter(myAdapter);

        renderBtn=findViewById(R.id.button);
        displayData=findViewById(R.id.textView);
        displayData.setMovementMethod(new ScrollingMovementMethod());

        renderBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handleData=findViewById(R.id.editInput);
                int ticketAmount = Integer.parseInt(handleData.getText().toString());
                int total;

//              FAULTY CONDITIONAL STATEMENT

                if (ferryRoutes[0] == "To Catalina Island"){
                    total = ticketAmount * 34;
                    displayData.setText(Integer.toString(total));
                }
                else{
                    total = ticketAmount * 18;
                    displayData.setText(Integer.toString(total));
                }

            }
        });

    }

}

2 个答案:

答案 0 :(得分:1)

您不是在检查所选内容,而是在检查静态数组中的值。因此,它将总是需要一个分支。如果要基于微调框的选择来做某事,则需要实际查询微调框以选择什么。

答案 1 :(得分:1)

这里的问题是ferryRoutes数组从未链接到下拉组件。
因此,条件

if (ferryRoutes[0] == "To Catalina Island")

将始终为true,并且将永远不会执行else块。

此外,切勿使用引用相等运算符String)比较==。使用equals

if ("To Catalina Island".equals(ferryRoutes[0]))

您可能很幸运能实习String,这将使相等运算符起作用。但是,一般不要这样做。