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;
}
有谁能告诉我为什么现在问题解决了?非常感谢!
答案 0 :(得分:1)
当您应该执行相反时,您正在为参数score
分配类变量sco
的值。换句话说:
您的代码说:
sco = score;
但你应该做的是:
score = sco;
在这两个功能中,您需要切换score
和sco
的顺序,以便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)