在执行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; }
谁能告诉我为什么现在问题解决了?真的会非常感激!
在执行 相反的* 操作时,您正在score为参数分配类变量的值。换一种说法:sco *
score
sco
您的代码说:
sco = score;
但是您应该做的是:
score = sco;
在这两个功能,你需要 切换顺序 的score和sco使score得到的价值sco。
就您的错误而言,setScore(float sco, int id)您在参数中定义sco为a,float但您尝试将其作为数组访问(通过说sco[Id] = score)。这就是为什么您收到错误消息的原因。
setScore(float sco, int id)
float
sco[Id] = score
就像我说的,您可以通过再次切换顺序来解决此问题:
sco[Id] = score;
进入:
score[Id] = sco;
编辑:
就这一部分而言:
我对应该放在括号中的内容感到困惑,这本书要求我放置“ float []分数”>而不是“ float [] sco”,但是它不起作用,因此在进行了几次试验后我进行了一些编辑。这部分编码通常描述了重载方法,该方法存储了5个主题的分数。
由于您想知道如何对参数和类变量使用相同的名称(如@Smutje所述),因此应使用关键字this。
this
这样,您就不会有任何歧义score:
this.score属于您的被调用类Score,可以在该类内部的任何函数中使用。它对于班级中的所有内容都是可见的。
this.score
Score
score是函数局部的函数参数setScore(),只能在内部使用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 }