Невозможно преобразовать double в логическое значение (нуб здесь) - PullRequest
1 голос
/ 18 апреля 2011

Это мой алгоритм, и моя цель здесь - установить выражение «if». Взгляните:

import java.util.Scanner;

public class apple {
    public static void main(String args[]) {
        System.out.println("This is occurring right now");

        for (float ind = 0; ind <= 0.50; ind += 0.1) {
            System.out.println(ind);
        }

        double find;
        if (find = 0.25);

В последней строке написано: «Я не могу преобразовать double в логическое значение».
Как мне поступить? (Я новичок, у которого мало времени, чтобы закончить это задание, как сегодня)


Хорошо, я просмотрел все ваши советы и придумал:

import java.util.Scanner;

public class apple {

    public static void main(String args[]) {
        System.out.println("this is occouring right now");

        for (float ind = 0; ind <= 0.50; ind += 0.1) {
            System.out.println(ind);
        }

        double find = 0;
        if (find == 0.25) {
            System.out.println("Group A has been Warned");
        } else if (find == 0.30) {
            System.out.println("Group A and B need to shut down");
        } else if (find == 0.40) {
            System.out.println("All Groups (A, B and C) need to shut down");
        }
    }
}

Я думал, что, установив там оператор if, он будет показывать мне предупреждения при запуске.

Как мне снова назвать то, что набирается внутри System.out.println()?
Я всегда называю распечатки ... Что теперь?


отлажены

 import java.util.Scanner;

public class apple {
public static void main(String args []) {
    Scanner dic = new Scanner(System.in);
    System.out.println("type the rate: ");
    for (double ind=dic.nextDouble(); ind <=0.50; ind+=0.1){

        // include my variables

        if (ind == 0.2){
        System.out.println("Group A has been Warned");

    }else if (ind == 0.3){
        System.out.println("Group A and B need to shut down");
    }else if (ind == 0.4){
        System.out.println("All Groups (A, B and C) need to shut down");
    }
}
}
}

Я предполагаю, что я иду в правильном направлении с этим. Donno. Дело в том, что я набрал 0,2, и он показал два предупреждения. Это должно показать только один. Я полагаю.

Ответы [ 8 ]

7 голосов
/ 18 апреля 2011

if (find == 0.25) - сравнение выполняется через ==, а не =, который предназначен для назначения.

Сообщение об ошибке означает, что вы пытаетесь присвоить двойное значение логическому (что невозможно)

Между прочим, ваш код может не работать из-за способа представления значений типа double. Если вы хотите иметь точные двойные вычисления, либо используйте BigDecimal, либо используйте int s (ваши двойные числа, умноженные на 10 или 100)

6 голосов
/ 18 апреля 2011

Используйте = для назначения и == для проверки на равенство.

Позже вы наткнетесь на тот факт, что числа с плавающей запятой не работают так, как вы ожидаете ...

3 голосов
/ 18 апреля 2011

If оператор хочет логическое значение в скобках

вы можете проверить эту ссылку

import java.util.Scanner;

public class apple {

public static void main(String args []) {    

System.out.println("this is occurring right now");    

for (float ind=0; ind <=0.50; ind+=0.1){        
System.out.println(ind);    
}    

double find;    

if (find == 0.25);// when it's "=" it sets find as 0.25, when it is "==" it compares the two values

версия вторая: если вы хотите только один, если работатьвы должны использовать break в конце операторов if, что будет делать то, что после обработки операторов if, соответствующих вашим условиям ind, он выйдет из цикла.

import java.util.Scanner;
public class apple {
   public static void main(String args []) {

     Scanner dic = new Scanner(System.in);    
     System.out.println("type the rate: "); 

     for (double ind=dic.nextDouble(); ind <=0.50; ind+=0.1){        
     // include my variables        
        if (ind == 0.2){        
          System.out.println("Group A has been Warned");  
          break;  
        }
        else if (ind == 0.3){        
          System.out.println("Group A and B need to shut down");  
          break;  
        }
         else if (ind == 0.4){        
           System.out.println("All Groups (A, B and C) need to shut down"); 
           break;   
         }
      }
   }
}
2 голосов
/ 18 апреля 2011

Не всегда хорошо сравнивать дробные числа с помощью ==.Числа представлены на компьютере не так, как мы пишем, поэтому 0.2 + 0.1 может немного отличаться от 0.3.Поэтому вместо

if (ind == 0.2){

лучше использовать что-то вроде

if (Math.abs(ind - 0.2) < 0.001){
1 голос
/ 18 апреля 2011
double find;
    if (find = 0.25);

Вы никогда не назначаете что-либо для поиска, поэтому if (если вы исправите проблему ==) никогда не будет истинным.

1 голос
/ 18 апреля 2011

если в операторе используются логические значения или выражения с использованием таких операторов, как ==,! =,>, <,> = И <=. </p>

Я не знаю, что вы ожидаете от своего кода, но ваша переменная "find" не имеет значения, и вы хотели использовать "ind", она вышла бы за рамки.

Ваш код не может иметь 0,25 где-либо

1 голос
/ 18 апреля 2011

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

Этот кусок кода:

if (find == 0.25);
System.out.println("Hello");

Всегда будет печатать Hello.

Тем не менее:

if (find == 0.25)
System.out.println("Hello");

Этот выводит только Hello, если выполняется оператор if.

1 голос
/ 18 апреля 2011

И Божо, и Иоахим ответили на вопрос, я просто добавлю, что if в java требует логического выражения внутри, а вы даете ему double - find. (find = 0.25) является заданием для поиска, но не является частью оценки. Вот почему вы получаете

не может преобразовать double в логическое значение

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