Java 为什么会有一个;“死枝”;在我的代码里?
下面是我的代码,在我最后一次使用if-else之前,它一直运行良好。看来我的布尔变量cangradeate和onpermission有问题。也许我在前面的if-else语句中错误地重新分配了它们。deadbranch发生在我最后一个if else的else一半Java 为什么会有一个;“死枝”;在我的代码里?,java,if-statement,boolean,Java,If Statement,Boolean,下面是我的代码,在我最后一次使用if-else之前,它一直运行良好。看来我的布尔变量cangradeate和onpermission有问题。也许我在前面的if-else语句中错误地重新分配了它们。deadbranch发生在我最后一个if else的else一半 package lab5; import java.util.Scanner; public class Lab5 { public static void main(String[] args) { //creates sc
package lab5;
import java.util.Scanner;
public class Lab5 {
public static void main(String[] args) {
//creates scanner object
Scanner scanner = new Scanner(System.in);
//PART II
//creating variables
double gpa;
int totalCreditsTaken;
int mathScienceCredits;
int liberalArtsCredits;
int electiveCredits;
boolean canGraduate = true;
boolean onProbation = false;
//prompts user for imput
System.out.println("What is your GPA?");
gpa = scanner.nextDouble();
System.out.println("What's the total amount of credits you've taken?");
totalCreditsTaken = scanner.nextInt();
System.out.println("How many math and science credits have you taken?");
mathScienceCredits = scanner.nextInt();
System.out.println("How many liberal arts credits have you taken?");
liberalArtsCredits = scanner.nextInt();
System.out.println("How many elective credits have you taken?");
electiveCredits = scanner.nextInt();
//creates first "if" statment to determine if GPA is high enough to be on track or on probation
if (gpa < 2.0){
System.out.println("You're on academic probation.");
onProbation = true;
}
//PART III
//creates a conditional to see if there's enough credits to graduate
if (totalCreditsTaken < 40 ){
System.out.println("You need more credit(s) to graduate.");
canGraduate = false;
}
else{
System.out.println("Examining credit breakdown...");
canGraduate = true;
}
//PART VI
//Nested if-else if-else to determine if the student qualifies for BA or BS
if ((mathScienceCredits >= 9) && (electiveCredits >= 10)){
System.out.println("You qualify for a BS degree.");
canGraduate = true;
}
else if ((liberalArtsCredits >= 9) && (electiveCredits >= 10)){
System.out.println("You qualify for a BA degree.");
canGraduate = true;
}
else{
System.out.println("You currently don't meet the degree requirments.");
canGraduate = false;
}
//PART V
//Uses an if statement to either congradulate the student or tell the student to take more classes
if ((onProbation = true) || (canGraduate = false)){
System.out.println("You don't qualify to graduate.");
}
else{
System.out.println("Congradualations you qualify to graduate.");
}
}
}
lab5包装;
导入java.util.Scanner;
公共类Lab5{
公共静态void main(字符串[]args){
//创建扫描仪对象
扫描仪=新的扫描仪(System.in);
//第二部分
//创建变量
双gpa;
国际信贷总额;
国际数学科学学分;
国际自由信贷;
国际选修学分;
布尔值cangradeate=true;
布尔值=假;
//提示用户输入
System.out.println(“你的平均成绩是多少?”);
gpa=scanner.nextDouble();
System.out.println(“您总共获得了多少学分?”);
TotalCreditStatken=scanner.nextInt();
你修了多少数学和科学学分;
mathScienceCredits=scanner.nextInt();
你修了多少文科学分;
liberartscredits=scanner.nextInt();
你选修了多少学分;
electiveCredits=scanner.nextInt();
//创建第一个“如果”状态,以确定GPA是否足够高,可以进入正轨或试用期
如果(gpa<2.0){
System.out.println(“你正在接受学术试用。”);
试用期=真实;
}
//第三部分
//创建一个条件,看看是否有足够的学分毕业
如果(总信用记录<40){
println(“你需要更多的学分才能毕业。”);
CANGRADUDE=假;
}
否则{
System.out.println(“检查信用细分…”);
CANGRADUDE=正确;
}
//第六部分
//嵌套if-else if-else,以确定学生是否有资格获得学士学位或学士学位
如果((数学科学学分>=9)和&(选修学分>=10)){
System.out.println(“你有资格获得学士学位”);
CANGRADUDE=正确;
}
如果((自由信用>=9)和&(选择性信用>=10)){
System.out.println(“你有资格获得学士学位”);
CANGRADUDE=正确;
}
否则{
System.out.println(“您目前不符合学位要求。”);
CANGRADUDE=假;
}
//第五部分
//使用if语句祝贺学生或告诉学生多上课
如果((试用期=真)| |(canGraduate=假)){
System.out.println(“你没有资格毕业。”);
}
否则{
System.out.println(“祝贺你有资格毕业。”);
}
}
}
您正在此处分配值:
if((onpermission=true)| |(canGraduate=false)){
您需要使用=
来比较它们
更新(评论后)
更好的是,不要比较布尔值。相反,由于onpermission
和canGraduate
都是布尔类型,因此可以使用:
if(试用期){
要归功于@realponsibilist和@FredK(在他们的评论中)对这里发生的事情有更多的解释 在Java中,
=
运算符是赋值,而不是比较(比较运算符是=
)。因此,如果a
是int
,a=3
表示“将值3放入变量a
”
但赋值也是一个表达式。除了将值放入该变量中,表达式还计算为已赋值的值
因此表达式a=3
的值是3。您可以执行以下操作:
System.out.println( a = 3 );
这将同时将3放入a
,并在控制台上打印3
通常,Java不允许您混淆=
和=
。如果变量是int
或float
或字符串,则编写如下语句:
if ( a = 3 ) ... // Compilation error
将不起作用,因为表达式的值是3,一个int
值,如果需要一个boolean
类型的表达式,那么它将告诉您表达式是错误的,您会注意到:“哦,我的意思是=
”
但是如果a
的类型是boolean
,那么写入a=false
或a=true
就是一个赋值,它也会返回被赋值的值,这是一个布尔值
if ( a = false ) ... // Compiles correctly
编译器不会抱怨,因为表达式的值是boolean
,而这正是if
所期望的。编译器不知道您实际上想要比较。它只知道它得到了一个适当类型的表达式
因此,建议绝对不要比较boolean
变量
if ( a == true )
写得完全正确
if ( a )
因为if
在a
为true
时会成功,在a
为false
时会失败。无需比较!重要的是要像您那样给变量起个好名字-cangradeate
是个好名字,下面的语句
if ( canGraduate )
“如果[用户]能够毕业…”的可读性很好
对于false
,您可以使用
if ( ! canGraduate )
它在英语中听起来不太好听,但它足够清晰,比if(canGraduate==false)
更清晰,而且你不会错过=
和编写if(canGraduate=false)
错了。事实上,为了防止类似的事情发生,不要比较布尔值。if(onpermission | | | |!canGraduate)
会做得很好。然后整个if-else语句变成了一个“deadbranch”。@realpoint-true。我只是指出了语法错误。@AutumnPickart想扩展吗?I