【问题标题】:is this a nested if? and while loop? not sure if I'm using them right. but I'm getting errors. "else without if"这是一个嵌套的 if 吗?和while循环?不确定我是否正确使用它们。但我遇到了错误。 “否则没有如果”
【发布时间】:2016-05-16 22:10:08
【问题描述】:

//决定用户是否会在支付的基础上获得佣金。

import java.util.Scanner;
public class commiPay{
    public static void main( String[] args ){
        Scanner input = new Scanner(System.in);
        int pay = 200;
        double com;
        double sales;
        double x;
        while ( sales = -1 )// I want the user to enter positive numbers
        {
            System.out.printf( "Sales cannot be negative");
            System.out.printf( "Enter sales sold this week: ");
        }
        System.out.println("Enter sales made this week: ");
        sales = input.nextInt(); 
        if ( sales >= 7500 )/*got this format from the traditional letter grade java example**/
        {
            System.out.println( "Commission is multiplied by 5%. " );
            com = sales*.5;
         else if ( sales >= 5001 )
             System.out.println( "Commission is multiplied by 4%. " );
             com = sales*.4;
         else if ( sales >= 2501 )
             System.out.println( "Commission is multiplied by 3%. " );
            com = sales*.3;   
         else if ( sales >= 1001 )
             System.out.println( "Commission is multiplied by 2%. " );
             com = sales*.2;    
         else ( sales < 1000 )
             System.out.println( "No commission. " );
             total = pay;
         }
         System.out.println( "You will get paid" + total + "this week."  );
     }
}

销售人员的报酬是每周 200.00 美元,外加 佣金。佣金取决于她(他)在一周内的销售额。

编写一个程序,提示用户一周的销售额(销售额使用整数)。

如果输入的金额小于 0,则显示一条错误消息,告诉用户“销售额不能为负数!”

使用下表中的信息,确定销售人员的佣金应该是多少。佣金应基于当周的总销售额。

佣金表:

        up to 1,000                              no commission
        1,001 – 2,500                            2% of sales
        2,501 – 5,000                            3% of sales
        5,001 – 7,500                            4% of sales
        over 7,500                               5% of sales

【问题讨论】:

  • 看看你的牙套。

标签: java if-statement while-loop nested


【解决方案1】:

确保正确格式化 if/elseif/else 语句:

if() {

} else if() {

} else if() {

} else {

}

【讨论】:

  • 虽然这可能是正确的答案,但也请解释一下 OP 的格式哪里出了问题。
【解决方案2】:

如果你的 else if 后面有不止一行,你需要把它放在大括号内,以确保你的程序不会混淆。据我所知,您只能使用

else if(something)
     indented something;
else if(something else)
etc.

如果你只有一行。

else if ( sales >= 5001 )
             System.out.println( "Commission is multiplied by 4%. " );
             com = sales*.4;

需要

else if ( sales >= 5001 ){
             System.out.println( "Commission is multiplied by 4%. " );
             com = sales*.4;
}

等等。

【讨论】:

    【解决方案3】:

    您的代码缺少括号,并且在您的while condition 中,并且计算也是错误的。

    import java.util.Scanner;
    public class commiPay{
    public static void main( String[] args ){
    Scanner input = new Scanner(System.in);
        int pay = 200;
        double com;
        double sales = 0;
        double x;
        double total; // added this variable
    
        //First you need to get the user input. So I added these two lines to here.
        System.out.println("Enter sales made this week: ");
        sales = input.nextInt();
    
        //Checking whether enterd number is a positive or not
        while ( sales < 0 )// I want the user to enter positive numbers
        {
            System.out.printf( "Sales cannot be negative ");
            System.out.printf( "Enter sales sold this week: ");
            sales = input.nextInt(); // if the entered number is an negative number ask the user to re enter the number 
        }
    
        if ( sales >= 7500 )/*got this format from the traditional letter grade java example**/
        {
            System.out.println( "Commission is multiplied by 5%. " );
            com = sales*0.05;
        }
         else if ( sales >= 5001 ){
             System.out.println( "Commission is multiplied by 4%. " );
             com = sales*0.04;
         }
         else if ( sales >= 2501 ){
             System.out.println( "Commission is multiplied by 3%. " );
            com = sales*0.03;
         }
         else if ( sales >= 1001 ){
             System.out.println( "Commission is multiplied by 2%. " );
             com = sales*0.02;
         }
         else if( sales < 1000 ){
             System.out.println( "No commission. " );
             total = pay;
         }
    }
    }
    

    【讨论】:

    • 您的销售额 = input.nextInt();永远不会到达您的 while 循环中的代码。一旦用户输入负数,程序就会结束。
    • 没关系,我看到您在 while 循环之前移动了调用以获取用户输入。
    • 是的。因为我们使用 while 循环只是为了检查用户输入,所以我们需要在检查之前获取用户输入。
    【解决方案4】:

    您的代码中缺少很多括号。您还需要初始化变量。输入小于 1000 的值,您将看到代码现在可以工作。还有一些我修复的尚未实现的代码。在每个 if 或 else if 块中,您需要将 compay 变量添加到您的 total 变量中。我还注意到您的佣金公式中的小数点已取消。

    例如:

    您的代码中有这个com = sales * .2;,这将产生 20% 的佣金,而不是代码 cmets 中的 2%。正确的公式是:

    com = sales * 0.02;
    

    我在你的代码中应用了这个修复。

        /decides if user will get commission on top of pay.
    
    import java.util.Scanner;
    
    public class commiPay {
    
    public static void main( String[] args )
    
    { 
    
        Scanner input = new Scanner(System.in);
    
    
    
    
      double pay = 200;
    
      //added this variable(was missing from your code)
      double total = 0;
    
      double com = 0;//
    
      //intialize sales variable
      double sales = 0;
    
      double x;
    
    
      //The following to lines were moved to before the while loop
      System.out.println("Enter sales made this week: ");
    
         sales = input.nextInt();
    
    
      //while the sales number is positive
     while ( sales < 0 )// I want the user to enter positive numbers
      {
         System.out.printf( "Sales cannot be negative");
    
    
         System.out.println("Enter sales made this week: ");
    
             sales = input.nextInt();
      }
    
    
    
    
    
    
    
    
    
      if ( sales >= 7500 )/*got this format from the traditional letter grade java example**/
       {
         System.out.println( "Commission is multiplied by 5%. " );
    
           com = sales * 0.05;
    
         //add the commission to the total
           total = pay + com;
    
       }
    
    
    
    
    
     else if ( sales >= 5001 ){//added bracket
    
         System.out.println( "Commission is multiplied by 4%. " );
         com = sales * 0.04;
    
         //add the commission to the total
         total = pay + com;
    
     }//added bracket//added bracket//added bracket//added bracket
      else if ( sales >= 2501 ){//added bracket
    
    
         System.out.println( "Commission is multiplied by 3%. " );
    
          com = sales * 0.03;
    
        //add the commission to the total
           total = pay + com;
    
      }//added bracket//added bracket//added bracket//added bracket
      else if ( sales >= 1001 ){//added brace
    
          System.out.println( "Commission is multiplied by 2%. " );
    
           com = sales * 0.02;
    
           //add the commission to the total
           total = pay + com;
    
    
      }//added bracket//added bracket//added bracket//added bracket
      else if( sales < 1000 ){
    
    
         System.out.println( "No commission. " );
                 total = pay;
    
       }
    
    
    
    
      System.out.println( "You will get paid " + (total) + " this week."  );
    
    
    
    
    
       }//end main method
    
    }//end class
    

    【讨论】:

    • OP 想要检查数字是否为正数,但在您的代码中它检查数字是否等于 -1。
    • 好点,我只是从原始代码中修复语法错误。
    • 但是这次你的 while 循环创建了一个无限循环。看我的回答。
    • 看起来还是有一些错误。你的 while 循环总是错误的。它没有检查用户输入。
    【解决方案5】:

    你有以下:

        while ( sales = -1)
    

    但如果他们没有专门输入 -1 怎么办?应该是:

        while ( sales < 0 )
    

    这将涵盖所有负数。您还应该修改括号,因为您似乎缺少一些。您也可以在 while 循环之后不使用 printf 并使用标准 println

        while ( sales = -1 )// I want the user to enter positive numbers
        {
            System.out.printf( "Sales cannot be negative");
            System.out.printf( "Enter sales sold this week: ");
    

    但我认为这不会造成问题。

    至于代码的其余部分,您在打印的行中声明销售额将乘以 5%,但将它们乘以 0.5(如下所示):

        System.out.println( "Commission is multiplied by 5%. " );
            com = sales*.5;
    

    乘以 0.5 等于 50%。尝试将其换成 0.05 (5/100)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-18
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多