0

私は基本的な二次式プログラムを持っていますが、double 以外の値が入力された場合にプログラムを終了するように変更しました。ただし、これを行ったため、プログラムの他の場所で入力された値を使用できないようです。最初の数行は次のとおりです。

import java.util.Scanner;

public class QuadraticFormula
{
  public static void main(String[] args)
  {
    double a, b, c; 
    Scanner reads = new Scanner(System.in); 

    System.out.println("General equation: \"ax^2 + bx + c\"");
    System.out.print("Enter value of \"a\": ");

    try { 
      String doubleString = reads.nextLine();
      a = Double.parseDouble(doubleString); 
    }
    catch (Exception e) {
      System.out.println("Invalid Data Type. Please enter a number");
    }

プログラムの残りの部分は、b と c の値を要求し、2 次方程式を実行して、入力された方程式の根を返します。ただし、a の値は try セクション内で定義されているため、コンパイラは a が初期化されていないと通知します。これを修正するにはどうすればよいですか?

編集: プログラムでユーザーが入力したデータ (doubleString として保存) を使用したいのですが、数値です。当面の問題はコンパイルエラーなのですが、入力した情報がtryブロック内であってもそれを利用する方法はありますか? ブロックの外側で double a を double doubleString と同一視しようとすると、 doubleString が存在しないと言われました。

4

4 に答える 4

0

宣言するときに a を初期化するだけです:

public static void main(String[] args)
{
  double a = 0.0;
  double b, c; 
  Scanner reads = new Scanner(System.in); 

他にできることは、 a を「クラス プロパティ」として宣言することです。

public class QuadraticFormula
{
    protected static double a = 0.0; 

    public static void main(String[] args)
    {
        double b, c; 
        Scanner reads = new Scanner(System.in); 
        try { 
            String doubleString = reads.nextLine();
            QuadraticFormula.a = Double.parseDouble(doubleString); 
        }
        catch (Exception e) {
            System.out.println("Invalid Data Type. Please enter a number");
        }

main() は static であるため、class プロパティ (a) には main() 内の静的参照を使用してアクセスする必要があることに注意してください。クラス機能を main() の外にパッケージ化する方法を学び始めることをお勧めします...静的参照の外...

import java.util.Scanner;

public class QuadraticFormula {

    protected  double a = 0.0;

    public static void main ( String[] args ) {
        QuadraticFormula lnewItem = new QuadraticFormula();
        try {
            lnewItem.doSomething();
        } catch ( Exception e ) {
            e.printStackTrace();
        }


    }

    public  void    doSomething () throws Exception {
        double b, c; 
        Scanner reads = new Scanner(System.in); 

        System.out.println("General equation: \"ax^2 + bx + c\"");
        System.out.print("Enter value of \"a\": ");

        try { 
          String doubleString = reads.nextLine();
          setA ( Double.parseDouble(doubleString) ); 
          System.out.println("setA() - [" + getA() + "]");
        }
        catch (Exception e) {
          System.out.println("Invalid Data Type. Please enter a number");
        }

    }

    public double getA () {
        return a;
    }

    public void setA ( double a ) {
        this.a = a;
    }
}

コードの最後のセクションでは、main() 以外のすべての静的参照が削除されていることに注意してください。Class プロパティ a に新しい getter/setter メソッドが用意されているため、Java のデータ カプセル化が強制されます。

于 2016-04-21T23:11:31.833 に答える
0

@Elliot Frischが言ったように、 a を値(0)に初期化し、解析の失敗により間違った値が得られないように注意することができます。あなたの場合、これはおそらくエラーメッセージでプログラムを返す/終了することを意味します。

これは実はよくあるパターンです。

import java.util.Scanner;

public class QuadraticFormula
{
public static void main(String[] args)
{
double a = 0, b, c; 
Scanner reads = new Scanner(System.in); 

System.out.println("General equation: \"ax^2 + bx + c\"");
System.out.print("Enter value of \"a\": ");

try { 
  String doubleString = reads.nextLine();
  a = Double.parseDouble(doubleString); 
}
catch (Exception e) {
  System.out.println("Invalid Data Type. Please enter a number");
  return;
}
//do work with a
于 2016-04-21T22:59:14.570 に答える
0

これには 2 つの修正方法があります。1 つは、次のように例外がスローされたときにメイン メソッドから単純に戻ることです。

    double a;
    Scanner reads = new Scanner(System.in);

    System.out.println("General equation: \"ax^2 + bx + c\"");
    System.out.print("Enter value of \"a\": ");

    try {
        String doubleString = reads.nextLine();
        a = Double.parseDouble(doubleString);
    }
    catch (Exception e) {
        System.out.println("Invalid Data Type. Please enter a number");
        return;
    }

他の人が述べた他のオプションは、「a」に初期値を与えることです。NaN (Not a Number) として初期化し、次のように使用する前に適切に初期化されていることを確認することをお勧めします。

    double a = Double.NaN;
    Scanner reads = new Scanner(System.in);

    System.out.println("General equation: \"ax^2 + bx + c\"");
    System.out.print("Enter value of \"a\": ");

    try {
        String doubleString = reads.nextLine();
        a = Double.parseDouble(doubleString);
    }
    catch (Exception e) {
        System.out.println("Invalid Data Type. Please enter a number");
    }

    if(Double.isNaN(a)){
        System.out.println("Variable 'a' is invalid, please enter a valid number.");
    }
    else {
        double result = 2 * a;
    }
于 2016-04-21T23:20:58.597 に答える
-1

この行の代わりに:

double a, b, c; 

これを次のように置き換えます。

double a=0, b, c; 
于 2016-04-21T23:16:50.527 に答える