首先,我对Java很新,很抱歉,如果这个问题非常简单。
事情是:我有一个String[] s
通过拆分一个字符串,其中每个项目都是一个数字。我想将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没有初始化那么初始化它”的问题。
答案 0 :(得分:13)
您无法将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]);
答案 1 :(得分:12)
您无法检查代码中是否初始化了变量,因为从定义中读取可能尚未初始化的变量会导致编译时错误。
您可以将变量初始化为null
并检查该值如果您的变量不是原始类型且 null
不是初始化后的有效值。
在具体示例中,您展示的第二个代码肯定会更清晰。
答案 2 :(得分:2)
int[] n = null;
for(String num: s){
if(n == null){
n = new int[(int) num];
continue;
}
n[n.length] = (int) num;
}
答案 3 :(得分:1)
如果在使用之前将变量或对象初始化为null
,
String myVar1 = null;
Person bobby = null;
您可以将变量或对象与非null进行比较,
if (myVar != null) {
// myVar has a value.
}
答案 4 :(得分:1)
您可能希望查看集合框架中的其他数据结构。
- &GT; http://java.sun.com/developer/onlineTraining/collections/Collection.html
ArrayList是数组
的合理替代品答案 5 :(得分:1)
您唯一能做的就是查看null
。如果您的代码在方法中,则在未初始化时将无法编译。因此,如果它编译并运行,您知道它已初始化为至少null
,然后执行null
检查。
答案 6 :(得分:1)
正如其他人所说,最接近“正确方法”的做法是将数组初始化为null。
关于其他问题:
“n [n.length]”将抛出“索引越界”异常。数组的元素范围从0到长度-1。在任何情况下,我认为你在第一种情况下打算说的是“n [0]”,第二种情况是“n [i]”。
在第一个元素中存储数组的大小可能是一个坏主意。它可以用于一个int数组,但它在String数组中会很乱,并且对于一个布尔数组它根本不起作用。即使在int情况下,您现在在同一数据结构中混合两个非常不同的东西,这可能会令人困惑。如果数组大小是固定的,“长度”无论如何都保持大小。如果数组大小是可变的并且您认为您要创建足够大的数组然后存储实际使用的数量,那么最好使用ArrayList,它可以干净地处理动态大小的数组。
答案 7 :(得分:0)
您可以查看null
:
int[] n;
for(String num: s){
if(n == null) {
n = new int[(int) num];
}
n[n.length] = (int) num;
}
请注意,只有当n是类成员时才会发生这种情况。如果它是一个局部变量,编译器将不允许你在没有初始化的情况下对它做任何事情。
答案 8 :(得分:0)
我遇到了这个问题,检查int
是否已初始化。在我的程序中,它可能已初始化为0
,因此检查if (int i = 0)
不会带来太多好处。
作为解决方案/解决方法,我创建了一个boolean
变量,该变量在int
初始化时设置。希望这会有所帮助。