簡體   English   中英

無法弄清楚為什么我得到空值

[英]Can't figure out why I am getting null values

該程序應該打印出選擇每個名稱的次數(用星號(*)表示。我的大多數代碼都在工作,但由於某種原因,輸出中每個名稱都包含兩個null值,不確定如何解決該問題。如果您有時間,我也很努力地找出哪個名稱帶有最多的星號。以下是示例輸出:

1:無效null ************************ Conner

2:nullnull ************************************** John等...(它對所有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]));      
        }

    }

}

FinalString和StarString數組中的元素仍未初始化。 因此,使用+ =運算符可在null元素上調用toString,並對每個字符串添加前綴“ null”。

正如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而不是xy z。 如果是字符串,則將其命名為“ banana”或“ peanuts”或其他名稱。 如果是對象,請確保初始化所有屬性,依此類推...

PS不確定我是否遇到過這么苛刻的情況,但這絕對不是我的意圖。 良好的編碼習慣非常重要,並且將來會非常有用。

祝你好運!

編輯:

稍作更新即可反映您對另一個答案的評論。 當您在此處創建FinalString時, String [] FinalString = new String[10]; 您沒有為它分配任何值,這與您對名稱所做的不同。

因此,當您的代碼到達此處的最終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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM