2016-04-21 31 views
0

我有一個基本的二次公式程序,但我修改了開始以結束程序,如果任何值以外的雙輸入。但是,因爲我已經這樣做了,所以我似乎無法使用程序中任何其他位置輸入的值。以下是前幾行:在Java中,如何使用程序中其他位置的try/catch塊內初始化的變量?

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的值,然後進行二次方程式,重新調整被輸入任何方程的根。但是,由於a的值是在try部分內部定義的,編譯器告訴我a沒有被初始化。我該如何解決?

編輯:我想使用用戶在程序中輸入的數據(存儲爲doubleString) - 但是一個數字。我的直接問題是編譯器錯誤,但是有什麼方法可以使用輸入的信息,即使它在try塊內?因爲當我試圖在塊的外面等同double a到double doubleString時,它說doubleString不存在。

+0

給'a'一個默認初始值;考慮是否有例外。沒有默認值,「a」根本沒有價值。 –

+0

@ElliottFrisch我不認爲這是OP的要求。這是掃描儀的輸入,無法在任何地方使用。 @Caroline'String doubleString = reads.nextLine();'不會拋出異常,因此不必在try塊內部。這是可能拋出異常的解析。 –

+0

@RahulSharma *但是,由於a的值是在try部分內部定義的,編譯器告訴我a沒有被初始化。如何解決這個問題?* –

回答

0

就像@Elliot Frisch說,你可以初始化一個值(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 
0

只是初始化你把它聲明:

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

你可以做的另一件事是聲明爲「類屬性」:

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"); 
     } 

請注意如何類屬性(a)必須在main()中使用靜態引用來訪問,因爲main()是靜態的,這會破壞使用getter/setter訪問Class屬性的Java規則。有一件事我會建議你應該開始學習如何的主()...靜態引用之外外面包類的功能...

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()以外被刪除。新的getter/setter方法適用於Class屬性a,從而實施Java的數據封裝。

-1

,而不是這一行:

double a, b, c; 

只是這種替換:

double a=0, b, c; 
0

這有兩個定位,一個是簡單地從你的主要方法返回時,一個例外是拋出像這樣:

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(不是數字),然後在使用它之前檢查它是否已正確初始化,如下所示:

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; 
    } 
相關問題