2016-06-26 5 views
-5
public static void main(String[] args) {   
    Scanner in = new Scanner(System.in);  
    String s = in.nextLine();   
    String l,b;   
    for(int i=0;i<(s.length()-2);i++) { 
    if(i==0) { 
     l=s.substring(i,i+3);  
     s.substring(i,i+3).compareTo(s.substring(i+1,i+4))>0 
      ? l=s.substring(i,i+3) 
      : l=s.substring(i+1,i+4); // assigned values 
     s.substring(i,i+3).compareTo(s.substring(i+1,i+4))<0 
      ? b=s.substring(i,i+3) 
      : b=s.substring(i+1,i+4); 
    } 

なぜ変数iとbが割り当てられていないのですか?3進演算子を使用しているときに未割り当ての変数エラー

+4

Downvoting。真剣に、人々にコードを読ませてもらうには、これ以上のことが必要です。 IMO、これは無礼に接している! –

+0

Niall Cosgroveによって修正されました。 – ajb

+0

ヒント:このコードが適切にフォーマットされていても、それはまったく恐ろしいものです。例えば、ロバート・マーティンの "Cleancode"を勉強して、この少しのコードでさえどれくらい改善できるかを理解したいと思っています。 – GhostCat

答えて

0

まず、あなたがないlへの割り当てとあなたのようなbがやろうとしているように見えることが(とを試してみて、両方に同じ値を割り当てることができもいるようです)。あなたははその後

for (int i = 1; i < (s.length()-2); i++) { 
    // ... 
} 

のようなあなたの最初のループ条件1を作る

b = l = s.substring(0, 3).compareTo(s.substring(1, 4)) > 0 ? 
     s.substring(0, 3) : s.substring(1, 4); 

のようなループの前にそれを行うことができ、ループが1で始まる場合0をテストする必要はありません。

0

3進表現の目的は値を返すことです。具体的には、式には条件に応じて2つの値から選択される値があります。その値は、他の式を使用できる場所であればどこでも使用できます。

x = (isSomeTestTrue()) ? 2 : 5; 
System.out.println((isSomeOtherTestTrue()) ? "this" : "that"); 

ifの代わりに使用しようとしています。それはあなたが?:部分で作業を行う文を入れて、式の値を無視している、次のとおりです。

s.substring(i,i+3).compareTo(s.substring(i+1,i+4)) > 0 
    ? l = s.substring(i,i+3) 
    : l = s.substring(i+1,i+4); 

はそれをしないでください。これは、三項表現のためのものではありません。そして、それはいつもうまくいくわけではありません(私は、このような三項式を使ってlの "明確な割り当て"の規則を満たすのに十分ではないかもしれないと考えていますが、規則は複雑で、 )。注:これは、PerlやJavaScriptなどの言語によっては許容されるイディオムである可能性があります。しかし、私はあなたがJavaやC#でこれを行うべきではないと思います。

2つのステートメントがあり、条件が真であれば1を、偽であれば1を実行したい場合はifを使います。

if (s.substring(i,i+3).compareTo(s.substring(i+1,i+4)) > 0) { 
    l = s.substring(i, i+3); 
} else { 
    l = s.substring(i+1, i+4); 
} 

それとも、この場合には、あなたは三項演算子を使用することができますし、lに結果を割り当てますので、全く恐ろしいコードスタイルの

l = (s.substring(i, i+3).compareTo(s.substring(i+1, i+4)) > 0) 
     ? s.substring(i, i+3) 
     : s.substring(i+1, i+4); 
関連する問題