2015-09-17 2 views
-9

Кто-нибудь знает, почему первое условие пропускается Java?Почему Java пропускает мое второе условие во время цикла?

while((withdraw % 100) != 0 && (withdraw > startBalance)) 

Хотя я заявляю, что вывод должен быть меньше, чем startBalance, вы можете набрать номер, который выше, чем startBalance а newBalance будет отрицательным.

Вот мой код:

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    int startBalance = 1000; 
    System.out.println("Please enter how much you want to withdraw: "); 
    int withdraw = input.nextInt(); 

    while((withdraw % 100) != 0 && (withdraw > startBalance)){ 
    System.out.println("Sorry, you can only withdraw a value multiple of 100 (we only have 100 SEK bills): "); 
    withdraw = input.nextInt(); 
    } 

    int newBalance = startBalance-withdraw; 
    System.out.println("Thanks! Your new balance is: SEK " + newBalance); 
} 
+0

Использование & вместо &&, если вы хотите, чтобы второе условие оценивается – borchero

ответ

4

Если первое условие ложно, то оно не будет рассматривать второе условие. Если первое условие истинно, то оно также будет оценивать второе условие. Это связано с тем, что вы используете & &. Если вы используете || то, если первая ложна, она будет оценивать следующее условие.

+0

@ T.J.Crowder nextInt(); заботится о том, что вы можете сделать то, что вы не можете сделать nextInt(); nextLine(); а затем nextInt(); снова в это время вам нужно очистить новую строку. – StackFlowed

+0

Обычная проблема заключается 'nextInt()' не в состоянии разобрать, но, будучи повторена в петлю без очистки недопустимого ввода. –

+0

@StackFlowed: Спасибо. :-) –

0

попробовать этот код:

import java.util.Scanner; 

public class Balance { 

    public static void main(String[] args) { 

      Scanner input = new Scanner(System.in); 
      int startBalance = 1000; 
      System.out.println("Please enter how much you want to withdraw: "); 
      int withdraw = input.nextInt(); 

      while((withdraw % 100) != 0 || (withdraw > startBalance)){ 
      System.out.println("Sorry, you can only withdraw a value multiple of 100 (we only have 100 SEK bills): "); 
      withdraw = input.nextInt(); 
      } 

      int newBalance = startBalance-withdraw; 
      System.out.println("Thanks! Your new balance is: SEK " + newBalance); 
     } 
} 

я использовал

|| (Или)

вместо

& & (а)

, потому что мы всегда должны проверить, если пользователь имеет достаточно баланс :)

+0

Спасибо! Я исправил его точно так же, как вы это сделали. Я новичок в программировании, поэтому я делаю такие ошибки. –

3
while((withdraw % 100) != 0 && (withdraw > startBalance)) 

Позвольте мне зачитать ваше состояние в простых словах:

«Keep зацикливание, пока и этих условий:

  • запрашиваемая сумма не круглая;
  • это больше, чем начать баланс.»

Итак, допустим, мы спрашиваем 1,000,000. Является ли это„не круглая“? Нет, держать ли оба условия? Нет. Поэтому, цикл заканчивается.

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

+0

Спасибо за объяснение! Я новичок в программировании, поэтому я делаю эти глупые логические ошибки. –

0

Мое предположение вы не хотите, чтобы цикл в проверьте, не является ли modulo % из 100 не указан AN D снятие средств превышает начальный баланс.

Двойные амперсанды && проверьте, являются ли оба аргумента истинными, и если ваш начальный баланс не был меньше 0, условия для цикла while никогда не будут выполнены.

Таким образом, вы хотите использовать операторы или операторы ||, которые будут проверять, выполнено ли какое-либо из этих условий, что вы ищете.

Изменение: while((withdraw % 100) != 0 && (withdraw > startBalance))

To: while((withdraw % 100) != 0 || (withdraw > startBalance))

Это позволит устранить проблему.

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