打印arrays显示错误输出
这段代码出了什么问题我得错了输出。 我不知道什么是错的,我希望你能帮助我:
public class Main{ public static void main(String[] args){ int[] data={11,22,33,55,22,88,99,77}; SortingAlgo algo=new SortingAlgo(); data=algo.selectionSort(data); System.out.println("numbers are"+ data); } }
其他课程
public class SortingAlgo{ public int[] selectionSort(int[] data){ int lenD = data.length; int j = 0; int tmp = 0; for(int i=0;i<lenD;i++){ j = i; for(int k = i;kdata[k]){ j = k; } } tmp = data[i]; data[i] = data[j]; data[j] = tmp; } return data; } }
这是我的出局:
numbers are[I@2e4b1dd8
输出完全没问题。 数组不会覆盖toString()
方法,因此它会调用Object#toString()
方法,该方法会生成这种表示forms。 输出的forms如下:
getClass().getName() + '@' + Integer.toHexString(hashCode())
对于数组, Class#getName()
方法对不同的元素类型使用一些编码来生成唯一的类名。 编码规则在文档中指定。
要获得人类可读的表示,可以使用Arrays#toString()
方法:
System.out.println("numbers are"+ Arrays.toString(data));
data
是一个int
数组 。 你应该使用Arrays#toString()
,这是以这种方式实现的:
3860 public static String toString(int[] a) { { 3861 if (a == null) 3862 return "null"; 3863 int iMax = a.length - 1; 3864 if (iMax == -1) 3865 return "[]"; 3866 3867 StringBuilder b = new StringBuilder(); 3868 b.append('['); 3869 for (int i = 0; ; i++) { 3870 b.append(a[i]); 3871 if (i == iMax) 3872 return b.append(']').toString(); 3873 b.append(", "); 3874 } 3875 }
确保您理解它,它将帮助您理解数组。
您可以循环数组并手动打印它:
for(int i: data) { System.out.println(i + " "); }
这样您就可以控制要打印的值,例如偶数值:
for(int i: data) { if(i % 2 == 0) { System.out.println(i + " "); } }
关于你得到的输出,这是对它的解释:
在Java中,每个对象都有toString()
方法,默认是显示类名表示,然后添加@
然后是哈希码。
数组的toString()被破坏了。 你需要
import java.util.Arrays; System.out.println("numbers are" + Arrays.toString(data));
这同样适用于Arrays.equals(),Arrays.hashCode()。 Array,Arrays,ArrayUtils类添加了您可能希望数组具有的function。
http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html
http://docs.oracle.com/javase/7/docs/api/java/sql/Array.html
但是,您可能会发现您确实需要ArrayList。