Java 选择排序在零或负输入情况下工作不正常

Java 选择排序在零或负输入情况下工作不正常,java,arrays,selection-sort,Java,Arrays,Selection Sort,我不太清楚为什么选择排序不能处理数组中的负数和零。它适用于所有正整数。如有反馈,将不胜感激 private static void selectionSort(int[] digits) { for (int i = 0; i < digits.length - 1; i++) { int index = i; for (int j = i + 1; j < digits.length; j++) { if (

我不太清楚为什么选择排序不能处理数组中的负数和零。它适用于所有正整数。如有反馈,将不胜感激

    private static void selectionSort(int[] digits) {

    for (int i = 0; i < digits.length - 1; i++) {
        int index = i;
        for (int j = i + 1; j < digits.length; j++) {
            if (digits[j] < digits[index]) {
                index = j;
            }
        int min = digits[index];
        digits[index] = digits[i];
        digits[i] = min;    
        }
    }
    System.out.println("Array after sorrting:");
    System.out.println("Number of digits in array: " + digits.length);
    System.out.print("Digits in array: ");
    for (int i: digits) {
        System.out.print(i + " ");
    }
    System.out.println("\n");
}
private static void selectionSort(int[]位){
对于(int i=0;i
选择排序方法以及项目的类别:

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    int n = 0;
    do {
        n = getNumDigits(in);
        if (n != 0) {
            int[] digits = new int[n];
            getDigits(digits, in);
            displayDigits(digits);
            selectionSort(digits);
        }
    } while (n != 0);
    in.close();
    System.out.println("No digits to sort? Goodbye! ");
}

// Given a Scanner as input, prompts the user for the number of digits they will
// be
// entering into an array. If the number given by the user is less than 0,
// display
// an error message and ask for a number that is 0 or greater. When a valid
// number is
// received, return it to the calling program.
private static int getNumDigits(Scanner inScanner) {
    int digits = 0;
    do {
        System.out.print("Please enter the number of digits to be stored: ");
        digits = inScanner.nextInt();
        if (digits < 0) {
            System.out.println("ERROR!  You must enter a non-negative number of digits!\n");
        }
    } while (digits < 0);
    return digits;
}

// Given an array and a Scanner as input, prompt the user to input integers to
// fill the
// array. The procedure should display a prompt for the user to enter an
// integer, and
// should loop until the entire array is filled with integer.
private static void getDigits(int[] digits, Scanner inScanner) {
    int i = 0;
    while (i < digits.length) {
        System.out.print("Enter integer " + i + ": ");
        digits[i] = inScanner.nextInt();
        i++;
    }

}

// Given an array as input, displays the total number of digits contained in the
// array
// and displays the contents of the array in order, starting at index 0 and
// ending
// with the final index of the array.
private static void displayDigits(int[] digits) {

    System.out.println("\nArray before sorrting:");
    System.out.println("Number of digits in array: " + digits.length);
    System.out.print("Digits in array: ");
    for (int i = 0; i < digits.length; i++) {
        System.out.print(digits[i] + " ");
    }
    System.out.println("\n");
}

// FOR LAB10B
// Given an array of integers as input, sorts the array using the Selection Sort
// algorithm
// provided in the Closed Lab 10 write-up.
private static void selectionSort(int[] digits) {

    for (int i = 0; i < digits.length - 1; i++) {
        int index = i;
        for (int j = i + 1; j < digits.length; j++) {
            if (digits[j] < digits[index]) {
                index = j;
            }
        int min = digits[index];
        digits[index] = digits[i];
        digits[i] = min;    
        }
    }
    System.out.println("Array after sorrting:");
    System.out.println("Number of digits in array: " + digits.length);
    System.out.print("Digits in array: ");
    for (int i: digits) {
        System.out.print(i + " ");
    }
    System.out.println("\n");
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int n=0;
做{
n=getNumDigits(英寸);
如果(n!=0){
int[]位=新的int[n];
getDigits(数字,英寸);
显示数字(数字);
选择排序(数字);
}
}而(n!=0);
in.close();
System.out.println(“没有要排序的数字?再见!”);
}
//给定一个扫描仪作为输入,提示用户他们将输入的位数
//是
//进入一个数组。如果用户给出的数字小于0,
//展示
//显示错误消息并询问0或更大的数字。当一个有效的
//号码是
//收到后,将其返回到调用程序。
专用静态int getNumDigits(扫描仪扫描程序){
整数位数=0;
做{
System.out.print(“请输入要存储的位数:”);
digits=inScanner.nextInt();
如果(数字<0){
System.out.println(“错误!您必须输入非负数的位数!\n”);
}
}数字<0;
返回数字;
}
//给定一个数组和一个扫描器作为输入,提示用户将整数输入到
//填满
//数组。该过程应显示提示,提示用户输入
//整数,和
//应循环,直到整个数组充满整数。
专用静态无效getDigits(int[]位,扫描仪扫描){
int i=0;
while(i

谢谢&我为所有的编辑道歉。我从不使用在线论坛。

尝试在内部循环外进行交换:-

private static void selectionSort(int[] digits) {

        for (int i = 0; i < digits.length - 1; i++) {
            int index = i;
            for (int j = i + 1; j < digits.length; j++) {
                if (digits[j] < digits[index]) {
                    index = j;
                }
               //previously u were doing swapping here
            //System.out.println("inner : " + convert(digits));
            }
            //i shifted the swapping block to this place
            int min = digits[index];
            digits[index] = digits[i];
            digits[i] = min; 

            //System.out.println("outer : " + convert(digits));
        }
        System.out.println("Array after sorrting:");
        System.out.println("Number of digits in array: " + digits.length);
        System.out.print("Digits in array: ");
        for (int i: digits) {
            System.out.print(i + " ");
        }
        System.out.println("\n");
    }
private static void selectionSort(int[]位){
对于(int i=0;i
============

输入:4,0,-4,5,2,1

排序后的数组:

数组中的位数:6

数组中的数字:-4 0 1 2 4 5

============

输入:3,4,2,5,3,21,-7,3,26,-43,-12,22

排序后的数组:

数组中的位数:12


数组中的数字:-43-12-7 2 3 3 3 4 5 21 22 26

以什么方式“不起作用”?我用负值测试了它,在这里效果很好。我更新了全班的帖子(不太长)。谢谢你发布了全班的帖子,现在告诉我们它是如何工作的。我们无法读懂你的心思。您正在输入什么值。你得到了什么结果?你期望得到什么结果?我不知道还有什么别的说法。当我输入正数时,它的排序非常完美。当输入有负数时,它不能正确排序。这个数组以[4,0,-4,5,2,1]开头,并将其排序为[0,1,-4,2,4,5]@almosthavoc我已经回答了你的问题。您需要更改交换的位置