【问题标题】:In a for loop my if statement doesnt produce what i want在 for 循环中,我的 if 语句不会产生我想要的
【发布时间】:2013-10-19 09:01:00
【问题描述】:

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

现在呢? 拿到手电筒 好的

现在呢? 列表 您携带: 手电筒

现在呢? 走楼梯 这里很黑!

现在呢? 拿手提包 好的

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)

抱歉,模糊不清......几乎当我没有手提包时,我希望它通过说“你正在携带”来列出我携带的物品,但是如果我在拿起手提包的时候拿起手提包......我想让它说“你的手提包里有这些物品”,但目前它打印出你只携带一次......但是你的手提包里有这些物品印在每一行......我只想要一次。

【问题讨论】:

  • 不太清楚你想要什么,但我认为if(hasItem[6])应该是if(hasItem[i])
  • @Andrew:您能否尝试完善您的问题?
  • 对不起,伙计们,我已经编辑了问题,最后添加了我想要的内容......我只是希望它只打印一次“你的手提包里有这些物品”,而不是每行..那就是如果我有 (hasItem[6])

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


【解决方案1】:

您的hasItem[6] 值为真,那么if (hasItem[6]) 条件将始终为真。 你的 else 部分不会被执行

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

【讨论】:

  • 这还不够,因为他想写出只有用户拥有的项目。 else 部分在用户没有手提包时执行,if 部分在有手提包时执行,但它不检查用户是否也有该物品。
  • 这与 Daniel 评论的内容差不多……我希望 if 语句列出用户拥有的东西……而不是他们“可能”拥有的一切。
  • @Andrew:我也给你写了一个答案,你也有时间尝试一下吗? :)
  • @Daniel:是的,您的代码一半有效...它阻止了所有项目的 println...但是现在它只是说您正在手提包中携带...项目...和说如果你有两个项目......它会打印出两次......所以仍然需要阻止它打印多个。
  • @Andrew:我根据您的需要修改了答案
【解决方案2】:

我认为问题在于,在您的条件的第一部分中,您只检查用户是否有手提包,而您没有检查该项目。第一个条件应该改写:

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

同时我会重构出内部开关,因为它在代码中出现了两次。我建议使用枚举类型而不是整数常量。

编辑:

为了防止它多次打印“您正在携带”行,您应该从 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
              }
          }
    }
}

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

【讨论】:

  • 我不知道我是否做错了什么...不确定 listItems(hasItem);但是这样做并编译它,它只是返回给我所有项目的列表......
  • @Andrew:是的,对不起,我忘了复制开关周围的条件,我刚刚修改了代码。我的错,复制粘贴错误。
猜你喜欢
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 2013-02-11
  • 2013-08-17
  • 2016-06-16
  • 2019-06-09
相关资源
最近更新 更多