2012-03-19 330 views
2

我正試圖在Java上編寫一個簡單的計算器程序。我的第一個計算器程序沒有任何問題註冊表示運算符爲真或假的布爾標誌(它只處理加法和減法),但是當我實現了乘法和除法到布爾值時,所有東西都被註冊爲真,因此所有列出了每項操作的結果。在Java中檢查標誌「if(flag = 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很新,所以我可能忽略了一些不一定看起來不合適的事情。如果你運行這個程序,你應該知道我遇到了什麼樣的問題。

+0

我* *相當一定的編譯器警告這個......,如果是這樣,可恥的...... – 2012-03-19 21:03:42

回答

11

如果你最後一塊if語句,你有if(isAdd=true)等等。這需要是if(isAdd==true)(或更好,只是if(isAdd))。

事實上,您可以通過簡單地刪除所有if語句並根據operator變量進行switch聲明來簡化操作。

+2

我發現一個方法來避免微妙的錯誤一樣,這是翻轉的順序比較(例如'if(true == isAdd)')。然後,如果我省略第二個等號,我將在賦值中得到一個有關非法左值的編譯器錯誤。 – 2012-03-19 22:43:18

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);等等。

3

if陳述分配,而不是平等的檢查:

if(isAdd=true) 

這將永遠是true

更改爲:

if(isAdd==true) 

或者只是:

if(isAdd) 

同爲其他if語句。

0

一個問題是所有條件if(is...=true)始終爲真。 而且您不需要明確地將is...設置爲false,因爲您已將它設置爲false已位於頂部。

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); 
} 
}} 
相關問題