if和else语句逻辑混乱

时间:2014-01-28 02:36:15

标签: java conditional-statements

我是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 :(得分:4)

if((select <= 4) && (select >= 0)),此陈述应该照顾-ve input

答案 1 :(得分: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时,它会跳过处理逻辑和错误消息。

答案 2 :(得分:2)

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

但如果你想要小于零或大于而不是四来被认为是坏的,这就是我认为你的意思,那么你想要

if(select < 0  ||  select > 4)

如果零和四也是坏的,那么使用

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

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

答案 3 :(得分:1)

看起来你最后还有一个额外的车把。

确定if和else属于哪种方法的一种方法是找到最内层的if。与此最接近的是与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");


}

希望这有帮助。