【问题标题】:Is there any method to store conditional statement in java?有什么方法可以在java中存储条件语句?
【发布时间】:2014-01-23 22:50:45
【问题描述】:

我想知道java中是否有存储if else条件的方法?我的意思是有一个变量来表示条件。这是我的原始代码

private OnClickListener click2 = new OnClickListener() { 

            @Override
            public void onClick(View v) {
            tv1.setText("");
            List<Integer> mClickedButtonIds = new ArrayList<Integer>();

            int[] mDesiredOrder = new int[] { ans1.getId(), ans2.getId(), ans3.getId(),
                                              ans4.getId(), ans5.getId() }; 

            mClickedButtonIds.add(v.getId());
            if (mClickedButtonIds.size() >= mDesiredOrder.length )

            {            
                if (mClickedButtonIds.get(0) == mDesiredOrder[0] 
                    && mClickedButtonIds.get(1) == mDesiredOrder[1] 
                    && mClickedButtonIds.get(2) == mDesiredOrder[2]
                    && mClickedButtonIds.get(3) == mDesiredOrder[3]
                    && mClickedButtonIds.get(4) == mDesiredOrder[4]
                    )
                {
                    tv1.setText("Correct!");
                }
                else 
                {
                    tv1.setText("Try Again!");
                }
                mClickedButtonIds.clear();
             }
        }
 };

我打算把它改成这样的

private OnClickListener click2 = new OnClickListener() { 

            @Override
            public void onClick(View v) {
            tv1.setText("");
            List<Integer> mClickedButtonIds = new ArrayList<Integer>();

            int[] mDesiredOrder = new int[] { ans1.getId(), ans2.getId(), ans3.getId(),
                                              ans4.getId(), ans5.getId(), ans6.getId() };   

            switch (main)
            {
            case 4 : Variable x = mClickedButtonIds.get(0) == mDesiredOrder[0] 
                    && mClickedButtonIds.get(1) == mDesiredOrder[1] 
                    && mClickedButtonIds.get(2) == mDesiredOrder[2]
                    && mClickedButtonIds.get(3) == mDesiredOrder[3];

            case 5 : Variable x = mClickedButtonIds.get(0) == mDesiredOrder[0] 
                    && mClickedButtonIds.get(1) == mDesiredOrder[1] 
                    && mClickedButtonIds.get(2) == mDesiredOrder[2]
                    && mClickedButtonIds.get(3) == mDesiredOrder[3]
                    && mClickedButtonIds.get(4) == mDesiredOrder[4];

            case 6: Variable x = mClickedButtonIds.get(0) == mDesiredOrder[0] 
                    && mClickedButtonIds.get(1) == mDesiredOrder[1] 
                    && mClickedButtonIds.get(2) == mDesiredOrder[2]
                    && mClickedButtonIds.get(3) == mDesiredOrder[3]
                    && mClickedButtonIds.get(4) == mDesiredOrder[4]
                    && mClickedButtonIds.get(5) == mDesiredOrder[5];
            }

            mClickedButtonIds.add(v.getId());
            if (mClickedButtonIds.size() >= mDesiredOrder.length )

            {            
                if (x)

                {
                    tv1.setText("Correct!");
                }
                else 
                {
                    tv1.setText("Try Again!");
                }
                mClickedButtonIds.clear();
             }
        }
 };

Variable x 是我想问的问题。是否有任何方法可以这样做,或者是否有任何variable 可以存储 if else 条件。由于原始代码,它被固定为 5 次点击。现在我希望根据用户想要的点击次数来改变所需的点击次数。

【问题讨论】:

  • x 是否有已知的输入和已知的条件子集?
  • 可以存储 if else 条件的变量”是什么意思?这句话让我压力很大。
  • 或者 x 只是一个布尔值?
  • 您可以使用 SharedPreferences 将变量值保存到“磁盘”。所以你可以在下次运行时重新加载它。
  • 我认为您需要使用for 语句并将您的比较代码移动到一个方法中,通过点击次数进行参数化

标签: java android if-statement conditional-statements


【解决方案1】:

根据代码sn-p,考虑一个循环:

boolean result = true;
for (int i = 0; i < main; ++i) {
    result = result && mClickedButtonIds.get(i) == mDesiredOrder[i];
    if (!result)
        break; // short-circuit out from loop if false
}

// now you can use "result" to test whether the condition matched all "main" ids
if (result) {
    // correct
} else {
    // bzzt, try again
}

【讨论】:

  • +1 这看起来是正确的方法。我只是按照这些思路编辑我的答案。
  • 如果那样的话,然后我把result放在if语句中,比如if (result) {}?
  • 你很聪明,它奏效了。它比使用 switch 语句更好
【解决方案2】:

如果我理解正确,您希望 x 成为您可以通过编程方式更改(但符合某种结构)的条件,那么您可以使用接口 Question 和实现该接口的类来做到这一点

public interface Question {
    boolean getResponse(String condition1, int condition2);
}

public class StringIsLongCondition implements Question{

    public boolean getResponse(String condition1, int condition2) {
        return condition1.length()>condition2;
    }

}

public class StringIsShortCondition implements Question{

    public boolean getResponse(String condition1, int condition2) {
        return condition1.length()<condition2;
    }

}

然后用like

Question x;

//some code that selects the question
x= new StringIsShortCondition();

if(x.getResponse(someString, someInt){
     //do something
}

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2012-01-29
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多