Почему условие my if не принимает целое число в java? - PullRequest
1 голос
/ 16 февраля 2012

В настоящее время я использую:

 int a=10;
 if(a=20)
     printf("TRUE");
 else
     printf("false");

Который печатает в С значение TRUE.

Но в случае Java:

int a=10;
if(a=20)
    System.out.println("TRUE");
else
    System.out.println("FALSE");

Я получу ошибку во время компиляции о несовместимом типе.

Ответы [ 7 ]

13 голосов
/ 16 февраля 2012

Причина этого заключается в том, что в C нет определенного типа boolean - вместо этого любое не-0 целое число оценивается как логическое "true".Таким образом, в вашем коде C:

if(a=20)

a присваивается значение 20, которое не равно 0 - и условие оценивается как true

В Java естьфундаментальный тип boolean и значение условного внутри if должны быть этого типа.

a=20

в Java присваивает от 20 до a и возвращает окончательный результат вычисления как integer value 20,однако ожидается тип boolean - следовательно, вы получаете ошибку во время компиляции о несовместимых типах.

Если вы хотите сравнить a с 20, вам нужно использовать *Оператор 1020 * на C и Java:

if(a == 20)

Компилируется на C и Java и печатает FALSE на обоих языках.

7 голосов
/ 16 февраля 2012

Вам необходимо заменить = на ==.

= - это оператор присваивания

int a=10;
if(a==20){
System.out.println("TRUE");}
else{
System.out.println("FALSE");}

Это должно работать нормально.

Редактировать:

В C возвращаемое целочисленное значение присваивания (в данном случае 20) является положительным значением int, которое оценивается как true.В Java ожидается логическое значение.

(см. Более подробный ответ, предоставленный Алексом G)

2 голосов
/ 16 февраля 2012

Одиночное = - это присвоение . Если вы хотите проверить на равенство, вы используете double == в C и Java.

Должно быть очевидно, что вы делаете неправильные вещи, даже в версии C, поскольку вы устанавливаете a в 10, а затем, сравнивая его с 20, вы получаете истинное значение.Я не знаю каких-либо математических систем, в которых 10 и 20 считаются равными: -)

Что происходит в вашем случае C, так это то, что присвоение фактически "возвращает" также и значение.

Оператор:

if (a = 20) ...

эквивалентен:

a = 20;
if (a) ...

, поэтому сначала он устанавливает a в 20, а затем использует его как условие if,Поскольку 0 ложно, а все остальное верно, тело if выполняется.

Хороший компилятор (например, gcc) на самом деле предупредит вас о том, что вы делаете, так что вы нене попасться на эти мелочиНекоторые люди также используют хитрость, заключающуюся в том, чтобы сначала поместить константы:

if (20 == a) ...

, чтобы при ошибочном использовании присваивания это была синтаксическая ошибка.Но я нахожу такой код некрасивым, тем более, что я в основном использую упомянутые выше хорошие компиляторы: -)

Причина, по которой вы получаете ошибку в Java, заключается в том, что она намного строже в том, что вы можете делать с присваиваниями.Под этим я подразумеваю, что нет автоматического преобразования из int в boolean, как с C. Таким образом, этот код отказывается компилироваться, выдавая ошибку:

class Test {
    static public void main(String[] args) {
        int a = 10;
        if (a = 20)
            System.out.println ("true");
    }
}

Но вы можете все же сгорает примерно так:

class Test {
    static public void main(String[] args) {
        boolean a = false;
        if (a = true)
            System.out.println ("true");
    }
}

Поскольку это присваивание имеет логическое значение внутри if, оно не вызывает ошибку компиляции из-за неправильного типа.Однако, поскольку он печатает true, это все равно не то, что вы хотели.

Итог, вернитесь и перечитайте первый абзац.= - присвоение, == - проверка на равенство.

0 голосов
/ 16 февраля 2012

значение a=20 равно 20. Вы должны использовать оператор ==.

0 голосов
/ 16 февраля 2012

if (a == 20) ... или

System.out.println (a == 20);

0 голосов
/ 16 февраля 2012

Используйте == для проверки условия вместо =.Таким образом, вы присваиваете 20 to a и не проверяете условие.

0 голосов
/ 16 февраля 2012

для сравнения вы должны использовать ==

if(a==20) вместо a=20, что является присваиванием

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