1. ホーム
  2. java

[解決済み] 演算子 > は、引数の型(複数可) boolean, double に対して未定義です。

2022-02-05 02:50:42

質問

私は新米プログラマーなので、本当に基本的なことでしたら申し訳ありません。このサイトを見て回りましたが、似たような質問はありましたが、私が必要としているものはありませんでした。

import java.util.Scanner;

public class sortThreeIntegers 
{
    public static void main (String[] args) 
        {
        Scanner input = new Scanner(System.in);
        Scanner input2 = new Scanner(System.in);
        Scanner input3 = new Scanner(System.in);
        System.out.println("Enter the first number: ");
        System.out.println("Enter the second number: ");
        System.out.println("Enter the third number: ");

        double firstNumber = input.nextDouble();
        double secondNumber = input2.nextDouble();
        double thirdNumber = input3.nextDouble();

        if (firstNumber > secondNumber > thirdNumber == true) 
        {
            System.out.println(firstNumber + ", " + secondNumber + ", " + thirdNumber);
        }
        else if (firstNumber > thirdNumber > secondNumber == true) 
        {
            System.out.println(firstNumber + ", " + thirdNumber + ", " + secondNumber);
        }
    }
}

注:これは私がコードを書いている途中のもので、まだ完成していません。

なぜ、エラー "The operator > is undefined for the argument type(s) boolean, double" が発生するのでしょうか?また、本当に簡単なことでしたら、申し訳ありません。

どうすればいいですか?

if (firstNumber > secondNumber > thirdNumber == true)

これは無効です。

if (firstNumber > secondNumber && secondNumber > thirdNumber)

同じことが、あなたの else if という条件があります。

Javaでは、例えばPythonのような連鎖的な比較はできません。また == true をブール式で使用します。結局のところ x == true は常に x .


あなたの受け取ったエラーは、あなたの式が次のように評価されていることから、理にかなっています。

(firstNumber > secondNumber) > thirdNumber

現在 (firstNumber > secondNumber) はブーリアンであり、ダブルと比較することはできません ( thirdNumber ).


最後に、数値をソートして出力しようとしているようにしか見えません。普通にソートして、その結果を出力すればいいのでは?また、3台のスキャナーを使い分けるのはやめましょう。同じものを3回使えばいいだけです。

数字を並べ替えるというのは、こういうことなんです。

double numbers[] = {firstNumber, secondNumber, thirdNumber};
Arrays.sort(numbers);
System.out.println(numbers[2] + ", " + numbers[1] + ", " + numbers[0]);