簡體   English   中英

如何檢查變量是否已初始化

[英]How do I check if a variable has been initialized

首先,我對Java很新,很抱歉,如果這個問題非常簡單。

問題是:我有一個String[] s ,它是通過拆分String來生成的,其中每個項都是一個數字。 我想將s的項目轉換為int[] n

s[0]包含n將保持的項目數,實際上是s.length-1 我正在嘗試使用foreach循環:

int[] n;
for(String num: s){
    //if(n is not initialized){
        n = new int[(int) num];
        continue;
    }
    n[n.length] = (int) num;
}

現在,我意識到我可以使用這樣的東西:

int[] n = new int[(int) s[0]];
for(int i=1; i < s.length; i++){
    n[i-1] = (int) s[i];
}

但是我相信我將來會遇到“如果n未初始化則初始化它”的問題。

您不能將String轉換為int Java是強類型的,並且沒有像腳本語言中那樣的隱式類型轉換。

要將String轉換為int ,請使用顯式轉換,如Integer.parseInt(String)

使用默認值初始化所有成員變量和數組元素。 對於int類型,值為0.對於引用類型( Object任何子類型),默認值為null 局部變量不會獲得默認值,但編譯器會分析代碼以確保在讀取變量之前分配值。 如果沒有,代碼將無法編譯。

我想你想要的是這樣的:

int[] n = new int[Integer.parseInt(s[0]);
for (int idx = 0; idx < n; ++idx)
  n[idx] = Integer.parseInt(s[idx + 1]);

您無法檢查代碼中是否初始化了變量,因為從定義中讀取可能尚未初始化的變量導致編譯時錯誤。

如果變量不是基本類型, 並且初始化后null不是有效值, 可以將變量初始化為null並檢查該值。

在具體示例中,您展示的第二個代碼肯定會更清晰。

int[] n = null;
for(String num: s){
    if(n == null){
        n = new int[(int) num];
        continue;
    }
    n[n.length] = (int) num;
}

如果在使用之前將變量或對象初始化為null

String myVar1 = null;
Person bobby = null;

您可以將變量或對象比較為非null,

if (myVar != null) {
  // myVar has a value.
}

您可能希望查看集合框架中的其他數據結構。

- > http://java.sun.com/developer/onlineTraining/collections/Collection.html

ArrayList是數組的合理替代品

你唯一能做的就是檢查null 如果您的代碼在方法中,則在未初始化時將無法編譯。 因此,如果它編譯並運行,您知道它被初始化為至少為null ,然后進行null檢查。

正如其他人所指出的那樣,最接近“正確方法”的做法是將數組初始化為null。

在其他方面:

“n [n.length]”將拋出“索引越界”異常。 數組的元素范圍從0到長度-1。 在任何情況下,我認為你在第一種情況下打算說的是“n [0]”而在第二種情況下是“n [i]”。

在第一個元素中存儲數組的大小可能是一個壞主意。 它可以用於一個int數組,但它在String數組中會很亂,並且對於一個布爾數組它根本不起作用。 即使在int情況下,您現在在同一數據結構中混合兩個非常不同的東西,這可能會令人困惑。 如果數組大小是固定的,“長度”無論如何都保持大小。 如果數組大小是可變的,並且您認為您要創建足夠大的數組然后存儲實際使用的數量,那么最好使用ArrayList,它可以干凈地處理動態大小的數組。

我遇到了這個問題,檢查int是否已初始化。 在我的程序中,它可能被初始化為0 ,因此檢查if (int i = 0)是否會有很大幫助。

作為解決方案/解決方法,我創建了一個在初始化int時設置的boolean變量。 希望這可以幫助。

你可以檢查null

int[] n;
for(String num: s){
    if(n == null) {
        n = new int[(int) num];
    }
    n[n.length] = (int) num;
}

請注意,只有當n是類成員時才會發生這種情況。 如果它是局部變量,編譯器將不允許您在沒有初始化的情況下對其執行任何操作。

暫無
暫無

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

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