Незаконный запуск выражения Java Boolean?

Я пытаюсь выполнить сравнение поразрядного числа, и мой код продолжает сталкиваться с недопустимым началом выражения в строке 30 моего кода с инструкцией "if".

Мой код читается так:

public class Project7 {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        double P = keyboard.nextDouble(); 
        double Q = keyboard.nextDouble();
        double R = keyboard.nextDouble();
        double S = keyboard.nextDouble();
        boolean First_Relation;
        boolean Second_Relation;

        if (P > Q) First_Relation = true;
        if (R < S) Second_Relation = true;

        if (First_Relation = true) & (Second_Relation = true); 
        System.out.println("Given the values for p,q,r, and s the expression "
        + "(p > q) && !(r < s) evaluates to " );
    }
}

Ответ 1

Инструкция if имеет следующий вид:

if (condition) statement

В настоящее время у вас есть два условия в квадратных скобках... которые также в конечном итоге присваивают значения, которые, вероятно, не то, что вы хотите.

Итак, сначала исправьте его, чтобы его компилировать:

if ((First_Relation = true) & (Second_Relation = true))

Затем измените назначения на проверки равенства, так как иначе он просто присвойт true обеим переменным, и условие пройдет независимо от их предыдущих значений:

if ((First_Relation == true) & (Second_Relation == true))

Затем удалите сравнения с булевыми константами:

if ((First_Relation) & (Second_Relation))

Затем удалите ненужные скобки:

if (First_Relation & Second_Relation)

Затем сделайте переменные следующими соглашениями об именах Java:

if (firstRelation & secondRelation)

Затем используйте более традиционное && вместо & - && короткое замыкание и почти всегда то, что вы хотите:

if (firstRelation && secondRelation)

Теперь у вас есть полуточка непосредственно после вашего условия if, что делает ее бессмысленной - она ​​всегда будет выполнять оператор System.out.println, потому что это не часть инструкции if. Вы могли бы просто удалить полуточку, но я бы добавил фигурные скобки для ясности:

if (firstRelation && secondRelation) {
    System.out.println("insert text here");
}

Затем обратите внимание, что вы фактически инициализируете свои переменные, если условие истинно, поэтому вы в настоящее время получаете ошибку времени компиляции для попытки чтения переменных, которые определенно не назначены.

Сначала зафиксируйте определенное задание:

// Names changed to follow conventions
boolean firstRelation = p > q;
boolean secondRelation = r < s;

... и код выше должен быть точным.

Далее, укажите, что вы действительно очень мало зарабатываете на этих дополнительных переменных. Вместо этого выполните следующие условия:

if (p > q && r < s) {
    System.out.println("Given the values for p,q,r, and s the expression "
    + "(p > q) && !(r < s) evaluates to ";
}

В этот момент становится совершенно ясно, что есть еще одна ошибка - потому что ваше сообщение говорит о !(r < s), но условие - это просто r < s. Поэтому вам нужно решить, чего вы хотите достичь, и сделать код и сообщение отражать то же самое. Обратите внимание, что сообщение не заканчивается. В самом деле, вы могли бы упростить все это:

System.out.println("Given the values for p,q,r, and s the expression "
    + "(p > q) && !(r < s) evaluates to " + ((p > q) && !(r < s));

... или все, что вы хотите, чтобы выражение действительно было.

Ответ 2

Насколько я знаю, вы не можете использовать оператор & в Java, чтобы выполнить поразрядное сравнение двух пар. Его можно использовать только с другими простыми примитивами, такими как ints и chars.

Кроме того, способ использования оператора & не будет выполнять поразрядное сравнение чисел, потому что вы используете его для сравнения результатов P>Q и R<S, оба из которых производят логическое значения.

Чтобы выполнить поразрядное сравнение двух пар, вам нужно использовать другую технику для прямого сравнения P с Q и R с S. Вот пример одного из способов сделать это: fooobar.com/questions/490522/....

Ответ 3

if (First_Relation == true && Second_Relation == true)
{
    System.out.println("Given the values for p,q,r, and s the expression "
    + "(p > q) && !(r < s) evaluates to " );
}

а эффективный путь

    if (First_Relation && Second_Relation)
    {
        System.out.println("Given the values for p,q,r, and s the expression "
        + "(p > q) && !(r < s) evaluates to " );
    }

Ответ 4

Попробуйте взять

(First_Relation = true) & (Second_Relation = true)

в скобки. И удалите ";" с конца заявления "если", потому что это не имеет смысла: ";" рассматривается как новое завершение утверждения (пустой оператор в вашем случае), и поскольку вы не указали область действия для оператора "if" - она ​​работает только для следующего утверждения statemnt i.e..

Ответ 5

Если условие не выполнено, то нет сообщения. Поэтому я предлагаю:

boolean evaluation = (P > Q) && !(R < S);
System.out.println("Given the values for p,q,r, and s the expression "
    + "(p > q) && !(r < s) evaluates to " + evaluation);