检查是否选择了开关盒

时间:2016-01-23 10:04:30

标签: java c#

我有一个使用开关盒的练习。假设代码像

int choice;
do {

  choice = //user input here;

  switch (choice) {
   case 1: //print something; break;
   case 2: //print something; break;
   case 3: //print something; break;
   default: //print default; break;
  }
} while(condition);

我希望用户只能选择一次案例。如果他们确实选择了案例1,他们就不能再选择那个了。

5 个答案:

答案 0 :(得分:0)

您可以为每个案例调用方法并使用一些bool来标记是否已经选择了每个案例,使用if语句检查案例是否已被选中,如果是,则打印通知以选择另一个案例,否则执行动作。

您也可以在没有单独方法的情况下执行此操作,但我是模块化代码的粉丝。 :)

答案 1 :(得分:0)

我假设一遍又一遍地调用包含此switch case的函数。如果你想要这样的功能,我会指向Set。使用该集存储选项。如果一个集合已经包含某个选择,请采取您认为合适的任何行动。

使用集合比拥有全局布尔数组更好,因为这可能会浪费大量内存,具体取决于您拥有的选项数量。

这会回答你的问题吗?

答案 2 :(得分:0)

当用户按下输入

如果输入是匹配的情况那么      将此输入存储在一个列表中。

下次你必须check this input

如果它属于List,

如果属于那么案件将不会执行 如果不属于那么它将执行案件。

尝试这种方式:

List<Integer> choiceList = new ArrayList<Integer>();

int choice;
do {
  choice = //user input here;

  if (choiceList.contains(choice)) {
    continue;
  }

  choiceList.add(choice);

  switch(choice) {
    case 1: //print something; break;
    case 2: //print something; break;
    case 3: //print something; break;
    default: //print default; break;
  }
} while(condition);

答案 3 :(得分:0)

为每个选项定义一个私有bool变量,如果用户调用每个选项,则将其设置为true。然后在再次运行该选项代码之前检查它是否为真。

例如:

bool _case1=false;
int choice;
do{
choice = //user input here;
switch(choice){
   case 1: 
     if(!_case1) 
      {
        //print something; 
        _case1=true; 
      } 
     else
      {
        //Tell the user "You have selected this option once"
      }    
     break;
     //etc

}
}while(condition);

答案 4 :(得分:0)

正如其他一些答案所说,您可以使用boolean来检查案件是否已被使用。但是,您也可以使用int。使用int的优点是您可以指定每种情况的使用次数。例如,以下代码只能使用每个案例一次。

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner user_input = new Scanner(System.in);
        int choice;
        int case1 = 0, case2 = 0, case3 = 0;
        int case1lim = 1, case2lim = 1, case3lim = 1;

        System.out.println("You may use may enter the number 1 " + case1lim + " times");
        System.out.println("You may use may enter the number 2 " + case2lim + " times");
        System.out.println("You may use may enter the number 3 " + case3lim + " times");

        do {
            System.out.println("Please enter a number between 1 and 3");
            choice = user_input.nextInt();

            if(choice == 1 && case1 < case1lim || choice == 2 && case2 < case2lim || choice == 3 && case3 < case3lim) {
                switch(choice){
                   case 1: //print something; 
                             case1++;
                             break;
                   case 2: //print something; 
                             case2++;
                             break;
                   case 3: //print something;
                             case3++;
                             break;
                   default: //print default; 
                             break;
                }
            } else {
                System.out.println("Please pick another number since you have already used that case or you entered a bad value");
            }
        } while(true);
    }
}

但是,如果更改行的值

int case1lim = 1, case2lim = 1, case3lim = 1;

int case1lim = 2, case2lim = 1, case3lim = 1;

您可以使用第一个案例两次,所有其他案例一次。