小编典典

表达式的类型必须为数组类型,但已解析为浮点型

java

在执行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;
}

谁能告诉我为什么现在问题解决了?真的会非常感激!


阅读 378

收藏
2020-11-30

共1个答案

小编典典

在执行 相反的* 操作时,您正在score为参数分配类变量的值。换一种说法:sco *

您的代码说:

sco = score;

但是您应该做的是:

score = sco;

在这两个功能,你需要 切换顺序scoresco使score得到的价值sco

就您的错误而言,setScore(float sco, int id)您在参数中定义sco为a,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
}
2020-11-30