该程序应该打印出每个名称被选中的次数(用星号(*)表示。我的大部分代码都在工作,但由于某种原因,输出中每个名称都包含两个空值,而我不确定如何解决该问题。如果您有时间,我也很努力地找出哪个名称带有最多的星号。这是一个示例输出:
1:空null ************************ 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]));
}
}
}
最佳答案
正如Karthik在他的回答中所提到的,您从未初始化(就像您从未分配值一样)FinalString数组。那就是导致您的错误的原因。
您可以很容易地判断出您的System.out.println()正在打印:
Number : nullnull Stars Name
因此,很明显,您的问题出在FinalString上,它是唯一无法正确打印的变量。
System.out.println((z+1)+": "+(FinalString[z] += StarString[z] + " "+StudentList[z]));
您在使用StarString数组时犯了同样的错误。在这种情况下,您很幸运能够摆脱它,因为最终在循环中向StarString添加了变量。
但是,不初始化ANY变量是>>可怕的<
因此,根据良好的编码习惯,请始终将变量初始化为某种形式。即使您稍后使用该变量两行,也没关系。创建变量时,为其分配一个值:
如果是整数,则为0或-1。最好是程序中不会出现该值,因此,如果代码中有错误,则可以轻松发现它,因为整数将是-1而不是x y z。
如果是字符串,则将其命名为“ banana”或“ peanuts”或其他名称。
如果是对象,请确保初始化所有属性
等等...
附言不知道我是否遇到过这么苛刻,但这绝对不是我的意图。良好的编码习惯非常重要,并且将来会非常有用。
祝你好运!
编辑:
稍作更新即可反映您对另一个答案的评论。
当您在
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。