Проверка флагов "if (flag = true)" всегда верна в Java? - PullRequest
2 голосов
/ 20 марта 2012

Я пытаюсь написать простую калькуляторную программу на 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 ]

11 голосов
/ 20 марта 2012

Если ваш последний блок операторов if, у вас есть if(isAdd=true) и так далее.Это должно быть if(isAdd==true) (или даже лучше, просто if(isAdd)).

На самом деле, вы можете упростить процесс, просто избавившись от всех операторов if и выполнив оператор switchна основе переменной operator.

5 голосов
/ 20 марта 2012

В конце вашего кода у вас есть 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); и т. Д.

4 голосов
/ 20 марта 2012

Операторы if являются присваиваниями, а не проверками на равенство:

if(isAdd=true)

, который всегда будет true.

Изменить на:

if(isAdd==true)

или просто:

if(isAdd)

То же самое для других if операторов.

0 голосов
/ 30 декабря 2015
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);
}
}}
0 голосов
/ 20 марта 2012

Одна проблема в том, что все условия if(is...=true) всегда выполняются. И вам не нужно явно указывать is... на false, потому что вы уже установили false уже наверху.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...