在for循环中,我的if语句不能产生我想要的东西

时间:2013-10-19 09:01:01

标签: java if-statement for-loop switch-statement

大家好,所以当我尝试访问代码时会发生以下情况,第一部分很好,因为没有库存中的手提包我希望它说你带着但是如果我有手提包我想要它说你是把这些物品放在你的手提包中,但下面会发生;

现在怎么办? 得到火炬 确定

现在怎么办? 名单 你带着: 炬

现在怎么办? 去楼梯 这里很黑!

现在怎么办? 拿到手提包 确定

What now? 
list
You are carrying these items in your handbag:
torch
You are carrying these items in your handbag:
wallet
You are carrying these items in your handbag:
keys
You are carrying these items in your handbag:
ring
You are carrying these items in your handbag:
USB
You are carrying these items in your handbag:
mobile
You are carrying these items in your handbag:
handbag

这是代码

public void listWhatYouHave()
{
    for (int i = 0; i < 7; i++)
    {
        if (hasItem[6])
        {
           System.out.println("You are carrying these items in your handbag:");
           switch (i)
           {
                case 0: 
                    System.out.println("torch");
                    break;
                case 1:
                    System.out.println("wallet");
                    break;
                case 2:
                    System.out.println("keys");
                    break;
                case 3:
                    System.out.println("ring");
                    break;
                case 4:
                    System.out.println("USB");
                    break;
                case 5:
                    System.out.println("mobile");
                    break;
                case 6:
                    System.out.println("handbag");
                    break;
                default: 
                    System.out.println("invalid item!");
                    break;
           }
        }
        else if (hasItem[i])
        {
            System.out.println("You are carrying:");
            switch (i)
            {
                case 0: 
                    System.out.println("torch");
                    break;
                case 1:
                    System.out.println("wallet");
                    break;
                case 2:
                    System.out.println("keys");
                    break;
                case 3:
                    System.out.println("ring");
                    break;
                case 4:
                    System.out.println("USB");
                    break;
                case 5:
                    System.out.println("mobile");
                    break;
                case 6:
                    System.out.println("handbag");
                    break;
                default: 
                    System.out.println("invalid item!");
                    break;
            }
        }
    }

你能帮忙吗...谢谢(这显然是java)

抱歉benig含糊不清......当我没有手提包时,我希望它能列出我带着'你正在携带'的东西,但是如果我把手提包拿到那个时候那个拿起来了......我想要说'你把这些物品放在你的手提包里',但是目前它打印出你只携带一次......但你带着这些物品在你的手提包里印有各行......我只想要一次。< / p>

2 个答案:

答案 0 :(得分:2)

您的hasItem[6]值为true,则if (hasItem[6]) condiion将始终为true。  你的其他部分不会被解雇

您可能需要if(hasItem[i])而不是if(hasItem[6])

答案 1 :(得分:0)

我认为问题在于,在您的情况的第一部分,您只检查用户是否有hadbag并且您不检查该项目。第一个条件应该重写:

if(hasItem[6] && hasItem[i])
{
 ....

同时我会重构内部swich,因为它在代码中有两倍。我建议使用枚举类型而不是整数常量。

编辑:

为了防止它多次打印“你正在携带”行,你应该从for循环中重构它。

我会这样做:

public void listWhatYouHave()
{
    if (hasItem[6])
    {
        System.out.println("You are carrying these items in your handbag:");
    }
    else
    {
        System.out.println("You are carrying these items:");
    } 

    listItems(hasItem);
}

void listItems(bool[] hasItem)
{
    for (int i = 0; i < 7; i++)
    {
          if(hasItem[i])
          {
              switch(hasItem[i])
              {
                  // ... put your case here
              }
          }
    }
}

此外,如果您不想写出手提包中随身携带的手提包,您可以将其从开关盒中取出,因为它是您用于其他目的的。