表达式的类型必须是数组类型,但它解析为float

时间:2014-09-10 08:00:13

标签: java overloading

当我正在编写Java代码时,我遇到了麻烦。我觉得我不知何故搞砸了这个概念,就像我不确定的那样:

void setScore(float[] sco)
{
    sco = score;
}

public void setScore(float sco, int id)
{
    sco[id] = score;
}

错误消息对应于“sco [ID] =得分;”

The type of the expression must be an array type but it resolved to float

我很困惑我应该放在括号中,这本书要求我把“float []得分”而不是“float [] sco”,但是它不起作用,所以我在几次后编辑了一下试验。编码的这一部分通常描述了存储5个主题的分数的重载方法。

这是我的整个编码:

public class Score {
float math, english, physics, chemistry, biology;
float sum, average;
float[] score;
int id;

void setMath(float Math) {
    math = Math;
}

void setEnglish(float English) {
    english = English;
}

void setPhysics(float Physics) {
    physics = Physics;
}

void setChemistry(float Chemistry) {
    chemistry = Chemistry;
}

void setBiology(float Biology) {
    biology = Biology;
}

void setSum(float Sum) {
    sum = math + english + physics + chemistry + biology;
}

void setAverage(float Average) {
    average = sum / 5;
}

float getMath() {
    return math;
}

float getEnglish() {
    return english;
}

float getPhysics() {
    return physics;
}

float getChemistry() {
    return chemistry;
}

float getBiology() {
    return biology;
}

float getSum() {
    return sum;
}

float getAverage() {
    return average;
}

public void setScore(float[] sco)
{
    sco = score;
}

public void setScore(float sco, int id)
{
    sco[id] = score;
}
}

现在我的问题解决了!因为我刚刚改变了这样:

    public void score()
{

}
public void setScore(float[] score)
{
    sco = score;
}

有谁能告诉我为什么现在问题解决了?非常感谢!

3 个答案:

答案 0 :(得分:1)

当您应该执行相反时,您正在为参数score分配类变量sco的值。换句话说:

您的代码说:

sco = score;

但你应该做的是:

score = sco;

在这两个功能中,您需要切换scoresco的顺序,以便score获得sco的值。

就您的错误而言,在setScore(float sco, int id)中您将参数sco定义为float,但您尝试将其作为数组访问(通过说sco[Id] = score)。这就是您收到错误消息的原因。

The type of the expression must be an array type but it resolved to float

就像我说的那样,你可以通过再次切换订单来解决这个问题:

sco[Id] = score;

分为:

score[Id] = sco;

编辑:

就这一部分而言:

  

我很困惑我应该放在括号中,这本书要求我放置" float []得分" >而不是" float [] sco",但它不起作用,所以我在几次试验后编辑了一下。这个>编码的一部分一般描述了存储5分的分数的重载方法。受试者。

由于您想知道如何对参数和类变量使用相同的名称,如@Smutje所提到的,您应该使用关键字this

这样,您使用的score没有歧义:

  • this.score属于您的类Score,可以在类中的任何函数中使用。它在课堂上的所有内容都可见。

  • score是函数setScore()的本地函数参数,只能在setScore()内使用。它只在函数内可见。

因此,包括所提及的所有内容,您应进行以下更改:

变化:

public void setScore(float sco, int id)
{
    sco[id] = score;
}

void setScore(float[] sco)
{
    sco = score;
}

要:

public void setScore(float score, int id) // changed sco to score
{
    this.score[id] = score;   // switched order, added keyword this
}

void setScore(float[] score) // changed sco to score
{
    this.score = score;  // switched order, added keyword this
}

答案 1 :(得分:0)

我猜你混淆了变量名称:

void setScore(float[] sco)
{
    sco = score;
}

public void setScore(float sco, int id)
{
    sco[id] = score;
}

因为score是您要填充的字段,sco是您要填充score的参数。上面的代码不会更改Score的任何内容,因此请尝试将其交换为

void setScore(float[] sco)
{
    this.score = sco;
}

public void setScore(float sco, int id)
{
    this.score[id] = sco;
}
如果您已开始使用this明确标记实例字段,那么它也会有所帮助。

答案 2 :(得分:0)

再次检查您的分数设置:

void setScore(float[] sco)
{
    sco = score;
}

什么是sco?你想分配什么?

  

您正在将本地变量分配给参数。它应该是相反的方式。 (this.score = sco)