该程序应该打印出每个名称被选中的次数(用星号(*)表示。我的大部分代码都在工作,但由于某种原因,输出中每个名称都包含两个空值,而我不确定如何解决该问题。如果您有时间,我也很努力地找出哪个名称带有最多的星号。这是一个示例输出:

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。

10-08 01:21