Java 选择排序实现不工作输出“[I@15db9742”
Java Selection Sort implementation not working output "[I@15db9742"
嘿,我正在尝试测试我的选择排序算法,但我在控制台中获得的所有输出都只是“[I@15db9742”
有人可以向我解释为什么我得到垃圾输出吗?这真的让我感到困惑,这可能是 IDE 的问题还是代码中的问题?
谢谢
import java.util.Arrays;
public class SelectionSorterTest {
// Factories
// Queries
/**
* Sorts a copy of the input array.
* @param input an array.
* @return a sorted copy of input.
*/
public static int[] sort (int[] input) {
int[] sorted = Arrays.copyOf(input, input.length);
for(int i = 0; i < sorted.length - 1; i++)
{
int minIndex = i;
for(int j = i + 1; j < sorted.length - 1; j++)
{
if(sorted[j] < sorted[minIndex])
{
minIndex = j;
}
}
if(i != minIndex)
{
swap(sorted, minIndex, i);
}
}
return sorted;
}
// Commands
// Private
// disabled constructor
private SelectionSorterTest () { }
private static void swap (int[] arr, int x, int y) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void main(String[] args)
{
int[] Array = {9,7,6,4,3,2,21,1};
System.out.println(sort(Array));
}
}
您正在控制台上直接打印数组对象。
使用java.util.Arrays.toString(int[])
方法。它 returns 指定 int 数组内容的字符串表示形式。
你的情况是 System.out.println(Arrays.toString(sort(Array)))
;
I@15db9742 是调用 long[].toString() 的结果,由 long[] 的类型签名加上一个 '@' 加上 hashCode() (感谢 EJP)
访问数组中的元素以打印它。
public static void main(String[] args)
{
int[] Array = {9,7,6,4,3,2,21,1};
for(int n : sort(Array)){
System.out.println(n);
}
}
通过使用这一行 System.out.println(sort(Array));
,您将打印出数组在内存中的地址。使用循环打印该数组的元素!
顺便说一句,您的算法不正确,因为您缺少 for 循环中的最后一个元素。从循环中删除 -1
部分以更正它。谢谢
问题是你把数组直接打印到控制台:
- 您需要使用 Arrays.toString(anArray) 或您的自定义函数:
如果使用 Arrays.toString(anArray):
首先你需要导入数组class到我们的程序中:
import java.util.Arrays;
第二然后将打印语句从:
System.out.println(sort(Array));
成为
System.out.println(Arrays.toString(sort(Array)));
如果是您的自定义方法:
像这样实现你自己的函数,只是去掉括号:
private static void printArray(int[] anArray) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < anArray.length; i++) {
if (i > 0) {
sb.append(", ");
}
sb.append(anArray[i]);
}
System.out.println(sb.toString());
}
并将打印语句更改为:
System.out.println(printArray(sort(Array)));
嘿,我正在尝试测试我的选择排序算法,但我在控制台中获得的所有输出都只是“[I@15db9742” 有人可以向我解释为什么我得到垃圾输出吗?这真的让我感到困惑,这可能是 IDE 的问题还是代码中的问题?
谢谢
import java.util.Arrays;
public class SelectionSorterTest {
// Factories
// Queries
/**
* Sorts a copy of the input array.
* @param input an array.
* @return a sorted copy of input.
*/
public static int[] sort (int[] input) {
int[] sorted = Arrays.copyOf(input, input.length);
for(int i = 0; i < sorted.length - 1; i++)
{
int minIndex = i;
for(int j = i + 1; j < sorted.length - 1; j++)
{
if(sorted[j] < sorted[minIndex])
{
minIndex = j;
}
}
if(i != minIndex)
{
swap(sorted, minIndex, i);
}
}
return sorted;
}
// Commands
// Private
// disabled constructor
private SelectionSorterTest () { }
private static void swap (int[] arr, int x, int y) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void main(String[] args)
{
int[] Array = {9,7,6,4,3,2,21,1};
System.out.println(sort(Array));
}
}
您正在控制台上直接打印数组对象。
使用java.util.Arrays.toString(int[])
方法。它 returns 指定 int 数组内容的字符串表示形式。
你的情况是 System.out.println(Arrays.toString(sort(Array)))
;
I@15db9742 是调用 long[].toString() 的结果,由 long[] 的类型签名加上一个 '@' 加上 hashCode() (感谢 EJP)
访问数组中的元素以打印它。
public static void main(String[] args)
{
int[] Array = {9,7,6,4,3,2,21,1};
for(int n : sort(Array)){
System.out.println(n);
}
}
通过使用这一行 System.out.println(sort(Array));
,您将打印出数组在内存中的地址。使用循环打印该数组的元素!
顺便说一句,您的算法不正确,因为您缺少 for 循环中的最后一个元素。从循环中删除 -1
部分以更正它。谢谢
问题是你把数组直接打印到控制台:
- 您需要使用 Arrays.toString(anArray) 或您的自定义函数:
如果使用 Arrays.toString(anArray):
首先你需要导入数组class到我们的程序中:
import java.util.Arrays;
第二然后将打印语句从:
System.out.println(sort(Array));
成为
System.out.println(Arrays.toString(sort(Array)));
如果是您的自定义方法:
像这样实现你自己的函数,只是去掉括号:
private static void printArray(int[] anArray) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < anArray.length; i++) { if (i > 0) { sb.append(", "); } sb.append(anArray[i]); } System.out.println(sb.toString());
}
并将打印语句更改为:
System.out.println(printArray(sort(Array)));