[英]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.