有谁知道为什么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 :(得分: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))
这将解决您的问题。