2017-05-31 38 views
-1

我正在進行一項調查,使用double來回答問題,但在擴展類中出現錯誤。子類中的double值問題

超類:

import java.io.Serializable; 

public abstract class Question implements Serializable 
{   
    protected String question; 
    protected int maxResponses; 
    protected int numResponses; 

    public Question(String q, int m) 
    { 
     question = q; 
     maxResponses = m; 
     numResponses = 0; 
    } 

    public abstract void askQuestion();  
    public abstract void displayResults();   
} 

,這裏是我的擴展類,這是DoubleQuestions:

import java.util.Scanner; 

public class DoubleQuestions extends Question 
{ 
    private double[] responses; 
    public DoubleQuestions(double q, int m) 
    { 
    super(q,m); // ERROR: constructor Question in class Question cannot be applied to given types; 
    responses = new double[m]; 
    } 

    @Override 
    public void askQuestion() 
    { 
    double response;    
    Scanner input = new Scanner(System.in); 
    System.out.print(question + " "); 
    input.nextLine(); //still have to "eat" the current response   
    response = input.nextLine(); // ERROR: incompatible types 
    responses[numResponses] = response; 
    numResponses++; 
    } 
    @Override 
    public void displayResults() 
    { 
    System.out.println(question); 
    for(int i = 0; i < numResponses;i++) 
     System.out.println(responses[i]); 
    }   
    } 

錯誤標記爲在源代碼中的註釋。

+1

你可以試試你收到什麼錯誤? –

+1

Java不是Javascript。一個標籤就夠了。 – GhostCat

+2

對我們來說沒有第23和第34行....我們需要錯誤信息msg –

回答

2

您的基構造函數需要一個字符串作爲第一個參數。您打算使用雙精度值來調用它。

但是java不會自動將double轉換爲字符串。

您想使用Double.toString()例如,返工這樣的代碼:

super(Double.toString(q), 

另一個問題:nextLine()返回一個字符串,不是一倍。因此你不能分配給雙重值。

真實的答案在這裏:閱讀有關您正在使用的類的文檔;你會發現,例如,掃描儀有一個方法nextDouble(),你可以調用。

+0

是的,就是這樣。 – EJoshuaS

+2

讓OP先糾正不顯示錯誤的錯誤給我們。我們可以通過我們自己來發現錯誤,但OP應該提到這一點。 –

+0

對不起,我對這個有點新,我試圖自我教,所以你可以告訴我,我應該在哪裏添加, – luigi

0

你有你的參數的方法搞砸:DoubleQuestions,將其更改爲:

public DoubleQuestions(String q, int m) 

記住:你必須通過相同類型的變量的情況下有類繼承。

+0

我不同意 - 「子」類構造函數接受與「父類」不同的參數是完全可以接受的。問題在於「超級」呼叫。 – EJoshuaS

+0

我同意你發佈的方法,我只是覺得在類繼承中使用相同類型的變量會更方便。它使調試更加簡單高效,並幫助程序員避免不必要的類型轉換。 –

1

一個錯誤在askQuestion方法中。您正在分配String value to avariable.

public static void main(String[] args) { 
    double response;    
    Scanner input = new Scanner(System.in); 
    System.out.print("question" + " "); 
    input.nextLine(); //still have to "eat" the current response   
    response = input.nextLine(); 
} 

看看這個double response;這是一張雙人牀和你分配input.nextLine(),這是String

爲了解決這一:

response = input.nextDouble(); 

獲取輸入作爲雙或更改response變量的數據類型到String

而第二個錯誤在您的super()。因爲您通過double值,並且在父類構造函數中,因此您將其作爲String

子類的構造函數

public DoubleQuestions(double q, int m) 
{ 
     super(q,m); 
     responses = new double[m]; 
} 

父類的構造

public Question(String q, int m) 
{ 
    question = q; 
    maxResponses = m; 
    numResponses = 0; 
} 

爲了解決這個問題,你可以重載構造函數在父類或通過qString

像這樣:

super(q+"",m); 

UPDATE:

q+""拼接是最簡單的一個,

但是在性能方面這是不好的,

"" + q慢作爲如上所示在super()Double.toString(q)比較好。

+0

你知道如何解決這個問題嗎? – luigi

+1

謝謝先生,我的代碼已經解決了 – luigi