检查标志“if(flag = true)”在Java中始终为真?

时间:2012-03-19 20:58:06

标签: java boolean flags

我正在尝试在Java上编写一个简单的计算器程序。我的第一个计算器程序没有任何问题注册布尔标志,表示操作符为true或false(它只处理加法和减法)但是当我实现乘法和除法到布尔值时,所有内容都被注册为true,所以所有的列出了每个操作的结果。

package com.arrdude.jason;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.lang.Math;

public class RegularCalculator {

public static void main(String[] args) {

    int var1 = 0;
    int var2 = 0;
    int operator = 0;
    boolean isAdd=false, isSub=false, isMult=false, isDiv=false;


try{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println ("Enter the first number");
    var1=Integer.parseInt(br.readLine());

    System.out.println ("Enter the second number");
    var2=Integer.parseInt(br.readLine());

    System.out.println ("Which function do you wish you use? Enter 1 for addition, 2 for subtraction, 3 for multiplication, 4 for division");
    operator=Integer.parseInt(br.readLine());

}
catch(NumberFormatException ne) {
    System.out.println("Invalid number" + ne);
    System.exit(0);
}
catch(IOException ioe) {
    System.out.println ("IO Error" + ioe);
    System.exit(0);
}

if (operator==1){
    isAdd=true;
}
else{
    isAdd=false;
}
if (operator==2){
    isSub=true;
}
else{
    isSub=false;
}
/*if (operator==3){
    isMult=true;
}
else {
    isMult=false;
}
if (operator==4){
    isDiv=true;
}
else {
    isDiv=false;
}
*/
if(isAdd=true) {
    int result = var1 + var2;
    System.out.println("The result is " + result);
}
if(isSub=true) {
    int result = var1 - var2;
    System.out.println("The result is " + result);
}
if(isMult=true) {
    int result = var1 * var2;
    System.out.println ("The result is " + result);
}
if(isDiv=true) {
    int result = var1 / var2;
    System.out.println("The result is " + result);
}
}

}

如果有人能够理解为什么会这样,那就太好了。我对Java很陌生,所以我可能忽略了一些不一定让人眼前一亮的东西。如果你运行该程序,你应该了解我遇到了什么样的问题。

5 个答案:

答案 0 :(得分:11)

如果是if语句的最后一个块,则为if(isAdd=true),依此类推。这需要if(isAdd==true)(甚至更好,只需if(isAdd))。

事实上,您可以通过删除所有if语句并根据switch变量执行operator语句来简化操作。

答案 1 :(得分:5)

在代码的最后,您有isAdd=true。这是赋值运算符。在此声明中,您要将true分配给isAdd,然后有效地评估is(true) {

为了解决这个问题,您应该将语句更改为:

if(isAdd==true) {
    int result = var1 + var2;
    System.out.println("The result is " + result);
}

此外,您的许多if陈述都是多余的。您可以更改以下内容:

if (operator==1){
    isAdd=true;
}
else{
    isAdd=false;
}

isAdd = (operator == 1);,依此类推。

答案 2 :(得分:4)

if语句是赋值,而不是相等检查:

if(isAdd=true)

始终为true

更改为:

if(isAdd==true)

或只是:

if(isAdd)

其他if语句也是如此。

答案 3 :(得分:0)

一个问题是所有条件if(is...=true)始终为真。 而且您无需明确将is...设置为false,因为您已将其设置为false已位于顶部。

答案 4 :(得分:0)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.lang.Math;

public class RegularCalculator {

public static void main(String[] args) {

int var1 = 0;
int var2 = 0;
int operator = 0;
boolean isAdd=false, isSub=false, isMult=false, isDiv=false;


try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println ("Enter the first number");
var1=Integer.parseInt(br.readLine());

System.out.println ("Enter the second number");
var2=Integer.parseInt(br.readLine());

     System.out.println ("Which function do you wish you use? Enter 1  for addition, 2 for subtraction, 3 for multiplication, 4 for    division");
operator=Integer.parseInt(br.readLine());

}
catch(NumberFormatException ne) {
System.out.println("Invalid number" + ne);
System.exit(0);
}
catch(IOException ioe) {
System.out.println ("IO Error" + ioe);
System.exit(0);
}

if (operator==1){
isAdd=true;
int result = var1 + var2;
System.out.println("The result is " + result);
}
else if(operator==2){
 isSub=true;
int result = var1 - var2;
System.out.println("The result is " + result);
}
else if (operator==2){
isSub=true;
int result = var1 - var2;
System.out.println("The result is " + result);
}

else if (operator==3){
isMult=true;
int result = var1 * var2;
System.out.println ("The result is " + result);
}

else if (operator==4){
isDiv=true;
int result = var1 / var2;
System.out.println("The result is " + result);
}
}}