【问题标题】:if and else statement logic confusionif 和 else 语句逻辑混乱
【发布时间】:2014-02-19 04:10:18
【问题描述】:

我是 Java 新手,我正在练习做一个 Java 应用程序,该应用程序循环询问用户有关此人已售出的某些物品的一些输入。但我正在尝试根据我的菜单选项设置 if 语句的条件。所以,如果用户输入 -1 或任何负数或超出范围的数字,这将大于 4,if 语句将失败并且显示 else 语句中的错误消息。但是有些我错过了一些我看不到的东西,所以我希望你们中的某个人能够真正看到它并让我知道我错过了什么..

public static void main(String[] args) {
        // TODO code application logic here
        Scanner input = new Scanner(System.in);

        SalesCal a = new SalesCal();

        int select = 1; // menu selection
        int solds; // sales person input

         a.displayMessage();

        while(select != 0){

            System.out.print("Plese enter \t1 for item1($239.99),\n\t\t2 for item2($129.75),\n\t\t3 for item3($99.95),\n\t\t4 for item4($350.89),\n\t\t0 to cancel: ");
            select = input.nextInt(); //getting user input
            System.out.print("\n");

            if((select <= 4) && (select <= 0) && (select < 0)){
                System.out.printf("You selected: item%d\n", select);
                System.out.printf("Plese enter the quantity sold for item%d: ", select);
                solds = input.nextInt(); //getting user input
                System.out.print("\n");
                a.GrossCal(select, solds);
            } else {
                System.err.print("Wrong selectiong, please try again...\n\n");
            }   
        }
        a.displayResults();
    }

}

非常感谢您的帮助...

【问题讨论】:

  • 哪个数同时小于4和0?
  • 从来没想过,我会尝试..这是我第一次使用netbeans并在java中编码..但deff会检查一下
  • 下次,告诉我们您期望的答案以及您使用的输入。
  • @zapl 它应该在 1-4 和 0 之间取消。负数或超出范围的数字,如 -5 或 6 将执行错误消息
  • @Infinity 我想,如果不清楚,我试图在帖子中解释我要做什么,我的错。英语不是我的第一语言,但我已经尽力了。

标签: java conditional-statements


【解决方案1】:

if((select &lt;= 4) &amp;&amp; (select &gt;= 0)),这个语句应该处理 -ve 输入

【讨论】:

    【解决方案2】:

    我认为你想要的if语句逻辑是:

    if (select > 0 && select <= 4){
        System.out.printf("You selected: item%d\n", select);
        System.out.printf("Plese enter the quantity sold for item%d: ", select);
        solds = input.nextInt(); //getting user input
        System.out.print("\n");
        a.GrossCal(select, solds);
    } else if (select != 0) {
        System.err.print("Wrong selectiong, please try again...\n\n");
    }
    

    当用户输入0时,这将跳过处理逻辑和错误消息。

    【讨论】:

    • 它似乎更适合您的方式,但单独保留 else 语句,但是当我按 0 时仍然显示来自 else 语句的错误消息,我没有得到
    • 确实有效,但我觉得 netbeans 打印消息有点迟钝.. 谢谢你..
    • @NorthBlast - 我很高兴它对你有用。我的代码的想法是在用户输入 0 时跳过数量请求。这就是为什么第一个 ifselect &gt; 0 而不是 select &gt;= 0。但是,由于 0 是有效输入(意思是“退出”),我还需要 else if 部分,因此不会显示错误消息。
    【解决方案3】:
    if((select <= 4) && (select <= 0) && (select < 0))
    
             A                B                C
    

    完全一样

    if(select < 0)
    
          D
    

    想一想:

    • 如果 select 为 5:A、B、C 和 D 都失败(导致 false)。两个 if 都返回 false
    • 如果是 4:B、C 和 D 失败。两个 if 都返回 false
    • 如果为 1:B、C 和 D 失败。两个 if 都返回 false
    • 如果为 0:C 和 D 失败。两者都返回false
    • 如果是 -1:A、B、C 和 D 都成功(返回 true)。两个 if 都返回 true

    但是,如果您希望小于零或 大于 4 被认为是坏的,这就是我认为您的意思,那么您想要

    if(select < 0  ||  select > 4)
    

    如果零和四本身也不好,那么使用

    if(select <= 0  ||  select => 4)
    

    if(!(select > 0  &&  select < 4))
    

    【讨论】:

      【解决方案4】:

      看起来你最后多了一个车把。

      确定 if 和 else 属于哪个的一种方法是找到最里面的 if。与此最接近的 else 是与 if 相关的 else。你可以从那里向外工作。

      :D

      或者如果条件为真,您可以使用 switch 语句并输入您自己的逻辑:

      switch(select) { 
          case 0: System.out.println("select = 0");
          break;
          case 1: System.out.println("select = 1"); 
          break;
          case 2: System.out.println("select = 2");
          break;
          case 3: System.out.println("select = 3");
          break;
          case 4: System.out.println("select = 4");
          break;
          default: System.out.println("Please enter a number from zero to four");
      
      
      }
      

      希望这会有所帮助。

      【讨论】:

      • 不客气。 :D ...嵌套的 if/else 语句令人困惑。如果使用括号,这可以改变代码的含义以使用不接近 if 我认为的 else 语句。如果语句没有括起来,那么最接近的内部 else 到最接近的内部 if 可以作为一种找出代码逻辑的方法。 :D 只需要一些练习,你就会拥有它。
      猜你喜欢
      • 2018-03-12
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多