为什么Java在while循环中跳过我的第二个条件?

时间:2015-09-17 14:19:29

标签: java loops while-loop multiple-conditions

有谁知道为什么Java会跳过第一个条件?

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

虽然我声明提款必须少于startBalance,但您仍然可以输入一个高于startBalancenewBalance为负数的数字。

这是我的代码:

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);
}

4 个答案:

答案 0 :(得分:4)

如果第一个条件为假,那么它不会考虑第二个条件。如果第一个条件为真,那么它也将评估第二个条件。这是因为你正在使用&&操作。如果你使用||然后如果第一个是假的,它将评估下一个条件。

答案 1 :(得分:3)

var  eventStatsViewModel = new StatsViewModel();
var eventStatDetails = new List<EventStartsDetails>();
eventStatDetails = populateStats(Id);
eventStatsViewModel.EventStatDetails.AddRange(eventStatDetails);              
eventStatsViewModel.EventStatDetails.OrderByDescending(x => x.Date);

让我用简单的语言宣读你的情况:

“只要这些条件的 保持循环,就保持循环:

  • 请求的金额不是圆的;
  • 它大于开始余额。“

所以,假设我们要求1,000,000。它“不圆”吗?不。两种情况都适用吗?不。因此,循环结束了。

作为一个侧面点,这与while((withdraw % 100) != 0 && (withdraw > startBalance)) &之间的区别或评估顺序无关。这只是普通的常识性逻辑。

答案 2 :(得分: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);
        }
}

我用过

  

|| (或)

而不是

  

&安培;&安培; (和)

因为我们总是需要检查用户是否有足够的余额:)

答案 3 :(得分:0)

我的假设是你不希望循环检查100的模%是否不等于 AND 撤回大于起始余额。

双&符号&&检查两个参数是否都为真,除非你的起始余额小于0,否则永远不会满足while循环的条件。

因此,您希望使用或运算符||,它将检查是否满足您正在寻找的一个或其他条件。

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

收件人:while((withdraw % 100) != 0 || (withdraw > startBalance))

这将解决您的问题。