Javaの三元演算子:error: not a statement

2213 ワード

次のコード・タイムズを実行します.
/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
/**
 *       
 *                :    >=90     A  ,60-89     B  ,60     C  。
 * (a>b)?a:b            
*/

class ClassifyGrade
{
	public static void main(String[] args)
	{
		System.out.println("          :");
		Scanner aInt = new Scanner(System.in);
		int score = aInt.nextInt();			//                  
		String grade = classify(score);
		System.out.println(grade);
	}
	public static String classify(int n)
	{
		n>=90?(grade = "A"):(n>=60?(grade = "B"):(grade = "C"));
		return grade;
	
	}
}
エラー:
Main.java:26: error: not a statement
		n>=90?(grade = "A"):(n>=60?(grade = "B"):(grade = "C"));
		     ^
1 error

エラーの原因は次のとおりです.
Javaの三元演算子:C++との違い
Javaではn>=90?(grade = "A"):(n>=60?(grade = "B"):(grade = "C")); これはただの式で、文を構成しません.
JAVAでは式に対して特定の要求があります.  式E;  
式文を作成するには、式Eは、1)付与式、2)自己増加++式、3)自己減少--式、4)メソッド呼び出し式、5)new式(オブジェクト作成式)のみでなければなりません.
次の言い方はもっと理解しやすいです.
[条件文]?[式1]:[式2]条件文が真の実行式1である場合、それ以外の場合、実行式2.式1または式2には戻り値が必要である.すなわち、式1または式2は、整数123のようないくつかの値であってもよい.私のコードではgrade=「B」は付与文であり、何の値が戻ってくるかは戻りません.
正しいコード:
/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
/**
 *       
 *                :    >=90     A  ,60-89     B  ,60     C  。
 * (a>b)?a:b            
*/

class ClassifyGrade
{
	public static void main(String[] args)
	{
		System.out.println("          :");
		Scanner aInt = new Scanner(System.in);
		int score = aInt.nextInt();			//                  
		String grade = classify(score);
		System.out.println(grade);
	}
	public static String classify(int n)
	{
		String grade = n>=90? "A":(n>=60? "B":"C");
		return grade;
	}
}

参考投稿:
どうして【三元演算子】は独立して文を作ることができなくて、値を返す方法があって独立して文を作ることができますか?