2016-09-19 15 views
1

構文エラー ";"行に "double a、b、c、discriminant、root;エラー ";"、変数宣言後に期待

このエラーを解決するにはどうすればよいですか?

public class Quadratic { 

    double a, b, c, discriminant, root; 

    discriminant = (b * b) - 4 * a * c; 

    public Quadratic(double a, double b, double c) { 
    } 

    public String calculateroots() { 

     if (discriminant >= 0){ 
      root = Math.sqrt(discriminant)/(2 * a); 

      System.out.println("Your roots are " + (-1 * b) + "+" + root + "and" + (-1 * b) + (-1 * root) +"."); 
     } 
     else { 
      root = Math.sqrt(Math.abs(discriminant))/(2 * a); 

      System.out.println("Your roots are " + (-1 * b) + "+ i" + root + "and" + (-1 * b) + "i" + (-1 * root) +"."); 
     } 
     } 
    } 
+3

このコードにはいくつかの問題があります。 discriminant =(b * b) - 4 * a * c;で始まる。メソッドまたは初期化ブロックに置く必要があります。 – Stultuske

+0

ヒント:Java命名規則をお読みください。メソッド名はキャメルケースになります!そして:javaの構文について読んでください。あなたはそれらが合っているかもしれないと思うところに文を置くことはできません... – GhostCat

+0

私は、コンストラクタであなたのインスタンス変数を設定し、そこで判別を解決することをお勧めします。 'public二次(double a、double b、double c){this.a = a; this.b = b; this.c = c;判別式=(b * b)-4 * a * c; } ' – Orin

答えて

-1

ここに移動します。

public class Quadratic { 

    double a, b, c, discriminant, root; 

    public Quadratic(double a, double b, double c) { 
     discriminant = (b * b) - 4 * a * c; 
    } 

    public void calculateroots() { 

     if (discriminant >= 0) { 
      root = Math.sqrt(discriminant)/(2 * a); 

      System.out.println("Your roots are " + (-1 * b) + "+" + root + "and" + (-1 * b) + (-1 * root) + "."); 
     } else { 
      root = Math.sqrt(Math.abs(discriminant))/(2 * a); 

      System.out.println("Your roots are " + (-1 * b) + "+ i" + root + "and" + (-1 * b) + "i" + (-1 * root) + "."); 
     } 
    } 

} 
+1

最初:コードのみの回答が悪いです。二番目: 'a'、' b''と 'c'も初期化するのが理にかなっているとは思いませんか? – Tom

-1

ちょうどあなたの質問に答えるために...構文エラーが(a, b ,c)初期化されていない変数が割り当てられている

discriminant = (b * b) - 4 * a * c;

判別式の場所によって引き起こされます。

私はcalculateroots()にそれを移動する提案としてvoidへ戻り値の型を変更します。

public class Quadratic { 

    double a, b, c, discriminant, root; 

    public Quadratic(double a, double b, double c) { 
     this.a = a; 
     this.b = b; 
     this.c = c; 
    } 

    public void calculateroots() { 

     discriminant = (b * b) - 4 * a * c; 

     if (discriminant >= 0){ 
      root = Math.sqrt(discriminant)/(2 * a); 

      System.out.println("Your roots are " + (-1 * b) + "+" + root + "and" + (-1 * b) + (-1 * root) +"."); 
     } 
     else { 
      root = Math.sqrt(Math.abs(discriminant))/(2 * a); 

      System.out.println("Your roots are " + (-1 * b) + "+ i" + root + "and" + (-1 * b) + "i" + (-1 * root) +"."); 
     } 
     } 
    } 

、あなたは二次のちょうどインスタンスを作成し、abcのコンストラクタに値を与えるこの方法は、その後calculateroots()を呼び出します

+0

NO! "**判別器には(a、b、c)未初期化変数が割り当てられています。**" – eRaisedToX

+0

NO!私はそうではありません。なぜなら、もしあなたがdouble myvar = a;それはエラーではありません。試してみることは、質問と同じことです。つまり、ここで許されていない変数を再定義しようとしています。 – eRaisedToX

+0

よろしくお願いします!それはしかし、ショートフォームだった.. 'bcoz' !!! しかし、そのような単純な言葉を理解するのが難しいと思うあなたのために編集 – eRaisedToX

0

calculaterootsdiscriminantの初期化として、コンストラクタ内の変数の初期化に注意してください。

public class Quadratic { 

     double a, b, c, discriminant, root; 

     public Quadratic(double a, double b, double c) { 
      this.a = a; 
      this.b = b; 
      this.c = c; 
     } 

     public void calculateroots() { 
      discriminant = (b * b) - 4 * a * c; 

      if (discriminant >= 0){ 
       root = Math.sqrt(discriminant)/(2 * a); 

       System.out.println("Your roots are " + (-1 * b) + "+" + root + "and" + (-1 * b) + (-1 * root) +"."); 
      } 
      else { 
       root = Math.sqrt(Math.abs(discriminant))/(2 * a); 

       System.out.println("Your roots are " + (-1 * b) + "+ i" + root + "and" + (-1 * b) + "i" + (-1 * root) +"."); 
      } 

     } 
    } 
関連する問題