我在下面有这个代码,它给了我这个输出
1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,
[Ljava.lang.String;@3e25a5
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
input.txt文件包含1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,
代码是这样的。很明显,分裂存在一个简单的错误,但我发现很难找到它。
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
FileInputStream fstream = new FileInputStream("input.txt");
DataInputStream dat = new DataInputStream (fstream);
BufferedReader in = new BufferedReader(new InputStreamReader(dat));
String[] str ;
int arr[] = new int [100];
String line;
while ((line = in.readLine()) != null)
{
System.out.println(line);
str = line.split(",");
System.out.println(str);
for(int i = 0 ;i<str.length ; i++)
{
arr[i]= Integer.parseInt(str[i]);
System.out.println(arr);
}
}
fstream.close();
}
catch(IOException e)
{
System.out.print(e);
}
}
答案 0 :(得分:8)
更改此
System.out.println(arr);
到
System.out.println(arr[i]);
在打印数组arr
之前,而不是数组的元素。
答案 1 :(得分:3)
看起来你反复打印数组,这将导致Java调用数组的toString()方法,这将为你提供类似于你提供的输出。
要解决此问题,请尝试将循环更改为:
for(int i = 0 ;i<str.length ; i++)
{
arr[i]= Integer.parseInt(str[i]);
System.out.println(arr[i]];
}
为了让您更清楚地知道发生了什么,这个程序会做类似的事情:
public class Test {
public static void main(String[] args) {
System.out.println(new int[0]);
}
}
将输出:
[I@164f1d0d
答案 2 :(得分:2)
在
中打印出数组 System.out.println(arr);
您有效地打印出Object
,恰好是Array
对象。这有一个toString()
方法,它会打印出对象的Class
和hashcode()
引用。
现在,由于您的数组是原始类型,它看起来像这样
[I@19821f
每个项目意味着什么
[ => "an array of"
I => "primitive integer"
@19821f => "which has a hashcode of 0x19821f"
请注意,这是一个默认的约定,这意味着虽然它正是您所看到的,但您不能指望这种阅读技术具有相同的单词保证意义。
与前面提到的许多人一样,你需要打印出数组的元素(不会使用这个伪对象toString()
表示,因为元素是一个整数。
答案 3 :(得分:0)
删除不必要的sysout以获得准确的输出。并且在最后一个sysout中打印元素不完整的数组。
答案 4 :(得分:-2)
str = line.split(",");
如果字符串包含逗号,则不应使用split()