2015-02-13 2 views
-1
import java.util.Scanner; 
public class bankcounter { 
    public static void main(String []args) { 
    int numchecks; 
    double totalfeeforchecks; 
    double totalfee; 
    double totalbasecharge; 
    double bankfee; 
    Scanner in = new Scanner(System.in); 
    System.out.printf("Enter in the amount of checks you wish to use: "); 
    numchecks = in.nextInt(); 
    totalbasecharge = 20.00; 
    bankfee = 10.00; 
    totalfeeforchecks = 0; 
    if(numchecks > 0 && numchecks < 20) 
     { 
     totalfeeforchecks += (numchecks * .10); 
     } 
    else 
     { 
     totalfeeforchecks += (19 * .10); 
     numchecks -= 19; 
     } 
     if(numchecks > 0 && numchecks <= 20) 
      { 
      totalfeeforchecks += (numchecks * .08); 
      } 
     else 
      { 
      totalfeeforchecks += (20 * .08); 
      numchecks -= 20; 
      } 
      if(numchecks > 0 && numchecks <= 20) 
       { 
       totalfeeforchecks += (numchecks * .06); 
       } 
      else 
       { 
       totalfeeforchecks += (20 * .06); 
       numchecks -= 20; 
       } 
       if(numchecks > 0 && numchecks <= 20) 
        { 
        totalfeeforchecks += (20 * .04); 
        numchecks -= 20; 
        } 
       else 
        { 
        totalfeeforchecks += (numchecks * .04); 
        } 
totalfee = totalfeeforchecks + totalbasecharge + bankfee; 
System.out.printf("Based on our check fee schedule: .10 cents for less than 20 checks :: .08 cents for 20-39 checks :: .06 cents for 40 to 59 checks :: .04 cents each for 60 or more checks\n\nYour charges are as follows: \nTotal fee = %.2f \n\tTotal base charge = \t%.2f\n\tTotal bank fee = \t%.2f\n\tTotal fee for checks = \t%.2f", totalfee, totalbasecharge, bankfee, totalfeeforchecks); 

Итак, если я ввожу 9 для numchecks, общая комиссия за проверку должна быть только 0,90, а не 2.96. Являются ли мои заявления if неработоспособными? Я думал, что если я поставлю 9 для numchecks, это должно быть выполнено только после первого условия, так как я вложил остальные из них ... помочь?Я получаю совершенно неожиданный результат от if-statement?

+5

Почему у вас есть отступы так, как они есть? – immibis

+4

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что он может быть тривиально отлажен, пройдя через него с помощью отладчика. –

+0

Вы сделали ** не ** гнездовые выражения 'if'. –

ответ

1

Я предлагаю вам использовать инструменты в вашей среде IDE, такие как форматирование и отладчик. С помощью этих инструментов вы увидите, у вас есть эта линия в четыре раза

if(numchecks > 0 && numchecks <= 20) 

И это верно в четыре раза, так что вместо этого if не работает это на самом деле больше работать, чем вы думали.

Это означает, что вы работаете

totalfeeforchecks += (numchecks * .10); // 0.9 
totalfeeforchecks += (numchecks * .08); // 0.72 
totalfeeforchecks += (numchecks * .06); // 0.54 
totalfeeforchecks += (20 * .04); // 0.8 
// total is 2.96 
+0

Но я думал, что это было вложено в соответствии с выражением else. –

+0

@AllisonStafford - просто отступы от ваших утверждений не делают их вложенными. –

+0

@AllisonStafford только оператор или блок после 'else' вложен в' else' не каждое утверждение после него. –

1

Позвольте мне исправить этот отступ для вас, без фактического изменения коды:

import java.util.Scanner; 
public class bankcounter { 
    public static void main(String []args) { 
    int numchecks; 
    double totalfeeforchecks; 
    double totalfee; 
    double totalbasecharge; 
    double bankfee; 
    Scanner in = new Scanner(System.in); 
    System.out.printf("Enter in the amount of checks you wish to use: "); 
    numchecks = in.nextInt(); 
    totalbasecharge = 20.00; 
    bankfee = 10.00; 
    totalfeeforchecks = 0; 

    if(numchecks > 0 && numchecks < 20) 
    { 
     totalfeeforchecks += (numchecks * .10); 
    } 
    else 
    { 
     totalfeeforchecks += (19 * .10); 
     numchecks -= 19; 
    } 

    if(numchecks > 0 && numchecks <= 20) 
    { 
     totalfeeforchecks += (numchecks * .08); 
    } 
    else 
    { 
     totalfeeforchecks += (20 * .08); 
     numchecks -= 20; 
    } 

    if(numchecks > 0 && numchecks <= 20) 
    { 
     totalfeeforchecks += (numchecks * .06); 
    } 
    else 
    { 
     totalfeeforchecks += (20 * .06); 
     numchecks -= 20; 
    } 

    if(numchecks > 0 && numchecks <= 20) 
    { 
     totalfeeforchecks += (20 * .04); 
     numchecks -= 20; 
    } 
    else 
    { 
     totalfeeforchecks += (numchecks * .04); 
    } 

    totalfee = totalfeeforchecks + totalbasecharge + bankfee; 

и теперь причина должна быть очевидной.

Смежные вопросы