我正在进行一项使用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]);
}
}
错误在源代码中标记为注释。
答案 0 :(得分:2)
您的基础构造函数需要一个字符串作为第一个参数。您打算使用double值来调用它。
但是java并没有自动将double转换为字符串。
例如,您想使用Double.toString()来重写您的代码:
super(Double.toString(q),
另一个问题:nextLine()
返回字符串,而不是双倍。因此,您无法分配双精度值。
这里真正的答案是:阅读有关您正在使用的课程的文档;例如,您会发现Scanner有一个方法nextDouble()
,您可以调用它。
答案 1 :(得分:1)
您的askQuestion
方法中存在一个错误。您正在指定String value to a
double 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();
}
看看这个double response;
它是一个双倍的,你指定的input.nextLine()
是String
。
解决这个问题:
response = input.nextDouble();
获取输入为double或将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;
}
要解决此问题,您可以重载父类中的构造函数,或将q
值作为String
传递。
像这样:
super(q+"",m);
<强>更新强>
这个q+""
连接是最简单的连接,
但表现明智并不好,
"" + q
速度较慢,如super()
中所示。 Double.toString(q)
更好。
答案 2 :(得分:0)
您在方法中弄乱了参数:DoubleQuestions,将其更改为:
public DoubleQuestions(String q, int m)
记住:在有类继承的情况下,你必须传递相同类型的变量。