-1

我必须用这个重复的 if else 循环检查每一个条件。如何使用 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"))
{

}
4

8 回答 8

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 ...
}
于 2013-03-22T16:33:23.937 回答
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);
        }
    }
}

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

于 2013-03-22T16:23:43.460 回答
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 块中有什么。例如,如果您只是输出值,它可能会变得非常简单。

于 2013-03-22T16:36:10.367 回答
0

我会将color-tag 用作 Integer-value- 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。

于 2013-03-26T15:25:52.647 回答
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();
    }
  }
于 2013-03-22T16:33:30.800 回答
0

如果您可以创建一个通用Command接口并将颜色和 id 封装到一个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知道该做什么的多态类中。

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

于 2013-03-22T16:22:16.713 回答
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
于 2013-03-22T16:24:27.583 回答
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;
    }     
}
于 2013-03-22T16:24:32.347 回答