该程序应该打印出选择每个名称的次数(用星号(*)表示。我的大部分代码都在工作,但由于某些原因,每个输出包含两个空值)名称,我不确定如何解决该问题。如果您有时间,我也会努力找出哪个名称带有最多的星号。这是示例输出:
1:nullnull ************************ Conner
2:nullnull **************************************约翰 等等... (对所有10个名称都执行此操作)
public class RandomStudentsLab {
public static void main(String[] args){
//create an array with 10 students
String [] StudentList = new String[10];
String [] StarString = new String[10];
String [] FinalString = new String[10];
//add 10 names to the student list
StudentList[0] = "Conner";
StudentList[1] = "John";
StudentList[2] = "Alex";
StudentList[3] = "Robert";
StudentList[4] = "James";
StudentList[5] = "Carl";
StudentList[6] = "Sarah";
StudentList[7] = "Bob";
StudentList[8] = "Ethan";
StudentList[9] = "Chris";
//loop 250 times selecting each student randomly
for(int i=0; i<250; i++){
int randomNum = (int)((Math.random()*10));
for(int x=0; x<10; x++){
if(randomNum == x){
StarString[x] += "*";
}
}
}
for(int z=0; z<10; z++){
System.out.println((z+1)+": "+(FinalString[z] += StarString[z] + " "+StudentList[z]));
}
}
}
答案 0 :(得分:2)
FinalString和StarString数组中的元素仍未初始化。因此,使用+ =运算符,它会在null元素上调用toString,并为每个字符串加上前缀“ null”。
答案 1 :(得分:0)
正如Karthik在他的回答中提到的那样,您从未初始化(就像您从未分配值一样)FinalString数组。这就是导致您出错的原因。
您可以轻松地判断出您的 System.out.println()正在打印:
Number : nullnull Stars Name
很明显,您的问题出在FinalString上,它是唯一无法正确打印的变量。
System.out.println((z+1)+": "+(FinalString[z] += StarString[z] + " "+StudentList[z]));
您在使用StarString数组时犯了同样的错误。在这种情况下,您很幸运能够摆脱它,因为您最终在循环中向StarString添加了变量。
但是,不初始化任何变量是>>可怕的<<< / strong>做法。您永远都不知道以前存储在内存中的内容,这可能导致您的变量被分配一些其他程序遗留在内存中的“外来”数据。其次,这就是您的问题所在,如果您忘记初始化,可能会遇到 null 错误等。
因此,根据良好的编码习惯,请始终将变量初始化为某种形式。即使您稍后使用该变量两行,也没关系。创建变量时,为其分配一个值:
如果是整数,则为0或-1。最好是程序中不会出现该值,因此,如果代码中有错误,则可以轻松发现它,因为整数将是-1而不是x y z。 如果是字符串,则将其命名为“ banana”或“ peanuts”或其他名称。 如果是对象,请确保初始化所有属性 等等...
P.S。不知道我是否遇到过这么苛刻,但这绝对不是我的意图。良好的编码习惯非常重要,并且在将来会非常有帮助。
祝你好运!
编辑:
稍作更新,以反映您对另一个答案的评论。
在String [] FinalString = new String[10];
处创建FinalString时,您没有为其分配任何值,这与您对名称所做的不同。
因此,当您的代码到达此处的最终for循环时:
for(int z=0; z<10; z++){
System.out.println((z+1)+": "+(FinalString[z] += StarString[z] + " "+StudentList[z]));
}
}
}
然后尝试为 FinalString [z] 做一个 System.out.println(),FinalString [z]仍然没有值。您没有在代码中编写
FinalString[0] = "Banana";
因此显然它将打印null。