2013-11-25 98 views
0
package lab10; 

    import java.util.*; 
    public class Lab10 { 

    class QuadraticEquation{ 

    double a,b,c; 

    QuadraticEquation(){ 
    Random number1 = new Random(); 
    a = (int) (number1.nextDouble() * 8 + 1.0); 

    Random number2 = new Random(); 
    b = (int) (number2.nextDouble() * 8 + 1.0); 

    Random number3 = new Random(); 
    c = (int) (number3.nextDouble() * 8 + 1.0); 


    } 
    double getA(){ 

     return a; 
    } 
    double getB(){ 

     return b; 
    } 
    double getC(){  

     return c; 
    } 
    double getDiscriminant(){ 
     double discriminant; 

     discriminant = (Math.pow(b, 2)- 4 *(a *c)); 
     return discriminant; 
    } 
    } 

public static void main(String[] args) { 

    QuadraticEquation equation = new QuadraticEquation(); //<---- error 

    System.out.println("Three randomized coefficients are: "); 
    System.out.println("a = " + equation.getA()); 
    System.out.println("b = " + equation.getB()); 
    System.out.println("c = " + equation.getC()); 

} 
    } 

我讀了一些文章的這裏計算器這個錯誤,但即使他們閱讀後,我似乎並沒有參考真正明白,爲什麼我在做了。我引用以前的項目,我不明白爲什麼我不能宣佈一元二次方程公式=新的一元二次方程()的Java:非靜態變量不能從靜態上下文

這裏是我引用的項目:

package InClass05; 

    public class TestSimpleSquare { 

    public static void main(String[] args) { 

    SimpleSquare square1 = new SimpleSquare(); 
    System.out.println("The area of the square of side lengths " + square1.length + " is " + square1.getArea()); 
    System.out.println("The perimeter of the square of side lengths " + square1.length + " is " + square1.getPerimeter()); 
    System.out.println("The diagonal of the square of side lengths " + square1.length + " is " + square1.getDiagonal()); 

    System.out.println(""); 
    SimpleSquare square2 = new SimpleSquare(25); 
    System.out.println("The area of the square of side lengths " + square2.length + " is " + square2.getArea()); 
    System.out.println("The perimeter of the square of side lengths " + square2.length + " is " + square2.getPerimeter()); 
    System.out.println("The diagonal of the square of side lengths " + square2.length + " is " + square2.getDiagonal()); 

    System.out.println(""); 
    square2.length = 500; 
    System.out.println("The area of the square of side lengths " + square2.length + " is " + square2.getArea()); 
    System.out.println("The perimeter of the square of side lengths " + square2.length + " is " + square2.getPerimeter()); 
    System.out.println("The diagonal of the square of side lengths " + square2.length + " is " + square2.getDiagonal()); 


} 
    } 
    class SimpleSquare{ 
    double length; 

    SimpleSquare(){ 
    length = 10; 
} 

SimpleSquare(double newlength){ 
    length = newlength; 
} 

double getArea(){ 
    return length * length; 
} 

double getPerimeter(){ 
    return length + length + length + length; 
} 

double getDiagonal(){ 
    return Math.sqrt(Math.pow(length, 2) + Math.pow(length, 2)); 
} 
void setlength(double newlength){ 
    length = newlength; 
} 
} 

在這其中我'能夠聲明SimpleSquare square1 = new SimpleSquare(); 我不明白爲什麼我不能在我現在正在處理的項目中做到這一點。 任何幫助,將不勝感激。謝謝。

回答

1

它應該是:

QuadraticEquation equation = new Lab10().new QuadraticEquation(); 

因爲QuadraticEquation是內部類

0

你可以加字static使類的靜態:

static class QuadraticEquation

沒有這個類中內部爲Lab10,所以它應該附加到封閉的實例。通常內部類是在類的成員內部創建的。

它在此之後編譯:

Three randomized coefficients are: 
a = 5.0 
b = 7.0 
c = 3.0 
+0

我明白了。但是如何在我的參考項目中沒有將其聲明爲靜態類的情況下工作。我能夠做SimpleSquare square1 = new SimpleSquare();沒有發生錯誤。 – DeathWish

+0

它在不同的層次上定義,不在你的課堂內。這被稱爲包級別。這兩種情況與Java的觀點截然不同。 SimpleSquare的情況就像在單獨的文件中定義的一樣。 –

+0

@DeathWish您的類QuadraticEquation在類Lab10中定義。你的類SimpleSquare不在另一個類中(你在定義它之前關閉了TestSimpleSquare類) – rjsang

0

QuadraticEquation被定義爲類Lab10內的內類。因此,它不能被除了外部類的一個實例中創建的,除非你改變它是一個靜態內部類:

static class QuadraticEquation{ 
... 
} 

或者,如果你需要它是非靜態的,你可以創建一個實例外部類的,當你創建內部類:

QuadraticEquation equation = new Lab10().new QuadraticEquation(); 

一時的困惑鏡像自己之後,我看到你的其他情況下,該類SimpleSquare只是不是一個內部類。這是另一個頂級課程。

Java允許您在同一個文件中的同一級別定義多個類,只要其中只有一個是公共的。

不同之處在於(可能是偶然)不同位置的末端支架!

+0

我明白了。但是,如果沒有將它聲明爲靜態類,它是如何在我之前的項目中起作用的。我能夠做** SimpleSquare square1 =新的SimpleSquare(); **沒有得到一個錯誤。 – DeathWish

+0

看到我的編輯更多一點解釋。 –

相關問題