2017-05-31 5 views
-1

Ich mache eine Umfrage, die Fragen mit einem Doppel beantwortet, aber ich bekomme einen Fehler in meiner erweiterten Klasse.Probleme mit doppelten Werten in der Unterklasse

Die Superklasse:

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

und hier ist meine erweiterten Klasse, die DoubleQuestions ist:

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

Fehler als Kommentare im Quelltext markiert sind.

+1

Können Sie plz metion welchen Fehler bekommen Sie ?? –

+1

Java ist kein Javascript. Ein Tag ist genug. – GhostCat

+2

es gibt keine Zeilen 23 und 34 für uns .... wir brauchen den Fehler msg –

Antwort

2

Ihr Basiskonstruktor erwartet eine Zeichenfolge als erstes Argument. Sie beabsichtigen, es mit einem doppelten Wert aufzurufen.

Aber Java konvertiert Double nicht automatisch in String.

Sie wollen Double.toString() zum Beispiel verwenden, der Code wie folgt zu überarbeiten:

super(Double.toString(q), 

Das andere Problem: nextLine() ein String zurückgibt, nicht verdoppeln. Sie können also keinen doppelten Wert zuweisen. Die echte Antwort hier: lesen Dokumentation über die Klassen, die Sie verwenden; Sie werden zum Beispiel finden, dass Scanner eine Methode nextDouble() hat, die Sie stattdessen aufrufen könnten.

+0

Ja, das ist es. – EJoshuaS

+2

Lassen Sie OP zuerst Fehler korrigieren, uns Fehler nicht anzuzeigen. Wir können den Fehler selbst einfangen, aber OP hätte das erwähnen sollen. –

+0

Es tut mir leid, ich bin ein wenig neu zu diesem und ich versuche zu lehren, können Sie mir sagen, wo genau sollte ich hinzufügen, dass – luigi

0

Sie haben Ihre Parameter im Verfahren verkorkste: DoubleQuestions, es ändern:

public DoubleQuestions(String q, int m) 

Denken Sie daran: Sie haben die gleichen Arten von Variablen in einer Situation passieren, wo die Klassenvererbung gibt.

+0

Ich stimme nicht zu - es ist vollkommen akzeptabel für "Kind" -Klassenkonstruktoren, andere Argumente als die "Eltern" -Klasse zu nehmen. Das Problem ist der "Super" -Ruf. – EJoshuaS

+0

Ich stimme der Methode zu, die Sie gepostet haben, ich denke nur, dass es viel bequemer ist, dieselben Arten von Variablen zu haben, in der Klassenvererbung die gleichen. Es macht das Debuggen einfacher und effizienter und hilft dem Programmierer, unnötige Typumwandlungen zu vermeiden. –

1

Ein Fehler ist in Ihrer askQuestion Methode. Sie zuweisen String value to a Doppel variable.

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

Blick auf diese double response; es ist eine doppelte und Sie input.nextLine() zuweisen, die String ist.

Um dies zu lösen:

response = input.nextDouble(); 

Get Eingang als Doppel- oder response variablen Datentyp String ändern.

Und der zweite Fehler in Ihrem super(). Weil Sie den Wert double übergeben und im übergeordneten Klassenkonstruktor den Wert String übernehmen.

Kind Klassenkonstruktors

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

Elternklasse Konstruktor

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

das Sie den Konstruktor lösen können in übergeordneten Klasse überlasten oder q Wert als String passieren.

So:

super(q+"",m); 

UPDATE:

Diese q+"" Verkettung ist die einfachste,

Aber Leistung klug ist es nicht gut,

"" + q ist langsamer als oben in super() gezeigt. Double.toString(q) ist besser.

+0

Wissen Sie, wie Sie das beheben können? – luigi

+1

danke Sir mein Code wurde gelöst – luigi

Verwandte Themen