我必须用这个重复的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"))
{
}
答案 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。