web-dev-qa-db-ja.com

インラインifステートメントJava、なぜ機能していない

Desc:compareCharはtrueまたはfalseを返します。 trueの場合、ボタンの値を設定し、falseの場合は何もしません。

私は使用しようとしています:

if compareChar(curChar, toChar("0")) ? getButtons().get(i).setText("§");

netbeansは言っています:

「)」を除く
':'を除く

私はこれらの組み合わせを試しました:

if compareChar(curChar, toChar("0")) ? getButtons().get(i).setText("§");
if compareChar(curChar, toChar("0")) ? getButtons().get(i).setText("§") : ;
if compareChar(curChar, toChar("0")) ? getButtons().get(i).setText("§") : 

if (compareChar(curChar, toChar("0"))) ? getButtons().get(i).setText("§");
if (compareChar(curChar, toChar("0"))) ? getButtons().get(i).setText("§") : ;
if (compareChar(curChar, toChar("0"))) ? getButtons().get(i).setText("§") : 
15
Erik Kubica

三項演算子? :は値を返すことです。フロー制御にifを使用する場合は使用しないでください。

if (compareChar(curChar, toChar("0"))) getButtons().get(i).setText("§");

十分に機能します。

https://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/operators.html

18
Guillaume

構文は次のとおりです。

"your condition"? "step if true":"step if condition fails"
59
Sach

(インラインif)in Javaは機能しません。正しい構文は次の例のとおりです。

int y = (c == 19) ? 7 : 11 ; 

または

String y = (s > 120) ? "Slow Down" : "Safe";
System.out.println(y);

変数Yの型は戻り値と同じであることがわかります...

あなたの場合、それは「?」なしの前の答えにあるように、インラインではない通常のifステートメントを使用する方が良いです

if (compareChar(curChar, toChar("0"))) getButtons().get(i).setText("§");
22
Zuhair Sagga

ケースには戻り値がありません。

getButtons().get(i).setText("§");

In-line-ifが3項演算である場合、すべての3項演算には戻り値が必要です。その変数は無効である可能性が高く、何も返さず、変数に戻りません。例:

int i = 40;
String value = (i < 20) ? "it is too low" : "that is larger than 20";

あなたの場合は、ifステートメントが必要です。

if (compareChar(curChar, toChar("0"))) { getButtons().get(i).setText("§"); }

また、中括弧を使用して、コードを読みやすくし、スコープを宣言する必要があります。

2
GetBackerZ
cond? statementA: statementB

等しい:

if (cond)
    statementA
else
    statementB

あなたの場合、すべての「if」を削除するだけです。 ?:の代わりにif-elseを完全に使用する場合。一緒に混ぜないでください。

1
TieDad

これは(条件)ですか? Trueステートメント:Falseステートメント

「if」を省きます

0
Ndivhuwo