我试图用文件“cool.txt”中的项目实例化String数组,并且对于数组温暖相同,除了文本文件“warm.txt”之外,程序工作到一定程度但是很多元素的数组被标记为null,如
这是部分正确的,因为它们的数组具有所有正确的项目;
之后只有数百万的null这是我的代码
int count2=0;
int count3=0;
String[] filename ={"Cool.txt","Warm.txt"};
String[] cool =new String[30];
String[] warm =new String [3000];
String[][] arrays = new String [][]{cool,warm};
BufferedReader fr;
try
{
for(int i=0; i<2; i++)
{
fr = new BufferedReader(new FileReader(filename[i]));
String line = fr.readLine();
while (line != null)
{
if (i<=0)
{arrays[i][count2]=line;
System.out.println("COOL");
count2++;}
if(i>=1)
{arrays[i][count3]=line;
System.out.println("WARM");
count3++;}
line = fr.readLine();
}
fr.close();
}
System.out.println(Arrays.asList(warm));
System.out.println(Arrays.asList(cool));
}
catch(Exception F){
System.out.println("NUL");
}
}
答案 0 :(得分:2)
在Java中创建对象数组时,它们会初始化为默认值。对于整数,这是0.对于对象,例如String,这是一个空引用。当你的数组包含30000个元素时,它将包含你文件中的元素(大约5个),其余的不会被初始化(null)。
如果要使用具有可变大小的对象列表,可以查找ArrayLists或其他类型的列表。如果您要替换以下行:
String[] cool =new String[30];
String[] warm =new String [3000];
和
System.out.println(Arrays.asList(warm));
System.out.println(Arrays.asList(cool));
带
List<String> cool = new ArrayList<String>();
List<String> warm = new ArrayList<String>();
和
System.out.println(warm);
System.out.println(cool);
您将获得正确的结果。
您已经在某种程度上使用了列表:方法调用Arrays.asList
将参数转换为List类型的对象。
答案 1 :(得分:0)
在函数结束时,您最终将它们转换为list
个对象。如果您只是使用List
开头,则不会有“数百万”的空值。您获得空值的原因是您只能分配一次数组,因此所有插槽都默认为null
。