如何用简单的for循环简化多个if else?

时间:2013-03-22 16:13:56

标签: java if-statement for-loop

我必须用这个重复的if if循环来检查每个条件。如何简化for循环或任何其他方法?

if(color.equals("1")&&id.equals("pant"))
{

}
else if(color.equals("2")&&id.equals("pant"))
{

}
else if(color.equals("3")&&id.equals("pant"))
{

}
else if(color.equals("4")&&id.equals("pant"))
{

}
else if(color.equals("5")&&id.equals("pant"))
{

}
else if(color.equals("6")&&id.equals("pant"))
{

}


if(color.equals("1")&&id.equals("shirt"))
{

}
else if(color.equals("2")&&id.equals("shirt"))
{

}
else if(color.equals("3")&&id.equals("shirt"))
{

}
else if(color.equals("4")&&id.equals("shirt"))
{

}
else if(color.equals("5")&&id.equals("shirt"))
{

}
else if(color.equals("6")&&id.equals("shirt"))
{

}

8 个答案:

答案 0 :(得分:1)

为此,您可以使用两个for循环, 首先得到一个包含两个元素的列表,即"衬衫"和"裤子"

之类的东西
string [2] cloths = {"pants","shirts"};   

和像i一样的变量并将其设置为1

int i = 1;    

然后

for (string cloth : cloths)
{
    for (i = 1; i < 7 ; i++)
    {
        if(color.equals(i.toString())&&id.equals(cloth))
        {
            System.out.println(i.toString()+"&"+cloth);
        }
    }
}

整个想法是这样的但是可能有一些小的语法错误,因为我没有编译代码

答案 1 :(得分:1)

switch (Integer.parseInt(color))
{
    case 1:
    if (id == "pant")
    {
        // 1:pant
    }
    else if (id == "shirt")
    {
        // 1:shirt
    }
    break;

    case 2:
    if (id == "pant")
    {
        // 2:pant
    }
    else if (id == "shirt")
    {
        // 2:shirt
    }
    break;

    // etc ...
}

答案 2 :(得分:1)

您可以使用内部if语句来实现稍微简单。

if (id.equals("pant")) {
    if (color.equals("1")) {
        //code
    }
    else if (color.equals("2")) {
        //code
    }
    //etc
}
else if (id.equals("shirt")) {
    if (color.equals("1")) {
        //code
    }
    else if (color.equals("2")) {
        //code
    }
    //etc
}

可能有一些方法可以进一步简化它,但我们真的需要知道if块中的内容。例如,如果您只是输出值,那么它可能变得非常简单。

答案 3 :(得分:0)

如果您可以创建一个通用的Command界面并封装颜色&amp;在Key课程中,您可以拥有Map <Key, Command>对{。}

public class Key {
    private final String color; // "6" as a color?  why not "blue"?
    private final String name;

    public Key(String color, String name) {
        this.color = color;
        this.name = name;
    }

    public String getColor() { return this.color; }
    public String getName() { return this.name; }
}

public interface Command {
    void execute(Object...args);
}

Map<Key, Command> noSwitch;
for (Key key : noSwitch.keyValues()) {
    noSwitch.get(key).execute();
}

或者,更好的是,将该行为嵌入到知道该做什么的多态StockItem类中。

你看起来像一个脆弱的,非面向对象的设计。你可以做得更好。

答案 4 :(得分:0)

您可以做的是创建一个界面:

interface Do {
    whatever()
}

除了你在不同的if分支中所做的任何实现之外。

然后有一个列表地图来存储和找到它们:

Map<String, List<Do>> dos = new HashMap();
// put lots of Do implementations in Lists and put them in the map.

设置完成后,你的if怪物将被缩减为:

dos.get(id).get(color).whatever

答案 5 :(得分:0)

如果大括号内部有什么不同,你不能轻易地用for循环替换它(我们需要看到大括号内的什么是最终的)。 switch语句至少会让事情变得更好(假设你使用颜色作为int而不是int的字符串

if (id.equals("pant")){
    switch(color){ //note color should be an int, not a string of an int for this to work
         case 1:
              //whatevers in the braces
              break;
         case 2:
              //whatevers in the braces
              break;
           etc
         default:
              break;
    }     
}

答案 6 :(得分:0)

您可以构建一个地图,将您感兴趣的组合映射到要执行的功能。

类似的东西:

  interface Function {
    void f(); 
  }

  public void test() {
    String color = "1";
    String id = "pant";
    // Map the string to a function.
    Map<String,Function> functions = new HashMap<String,Function>();
    // As many of these as you have different processes.
    // You could name them too.
    functions.put("1|pant",new Function() {

      @Override
      public void f() {
        // What to do when we see color=1 id=pant
        System.out.println("1|pant");
      }

    });
    // Pull the function out of the map.
    Function f = functions.get(color+"|"+id);
    // If it was there.
    if ( f != null ) {
      // Do it.
      f.f();
    }
  }

答案 7 :(得分:0)

我会将color - 标记用作整数值 - switch

switch (color){
case 1:
if (id.equals("pant"){}
else if (id.equals("shirt"){}
break;
case 2:
if (id.equals("pant"){}
else if (id.equals("shirt"){}
break;
.
.
.}

最简单的方式imo。