10个元素Array在Selection sort项目中只接受5个整数

时间:2013-10-24 05:55:32

标签: java arrays sorting

好的,这是一个Java类,但我不是在找人编写代码,只是帮我调试一下。我想输入10个整数,输入按输入后按升序排序,然后显示,数组中可能没有任何零(0)。

分配应如下所示:

输入10个整数 - 一次一个......

输入整数#1:21

排序的数字:21

输入整数#2:48

排序的数字:21 48

输入整数#3:37

排序的数字:21 37 48 等....

我尝试过选择排序,插入和冒泡排序,但数组不会保留或显示超过5个数字。

帮助。

这是我的主要内容:

import java.util.*;

public class Main {

static Scanner input = new Scanner(System.in);

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner input = new Scanner (System.in);

    int j = 1;
    int[] list = new int[10];

    System.out.println("Enter 10 integers - one at a time...");

    for (int i = 0; i < list.length; i++){

        System.out.print("Enter integer #" + j + ": ");
        list[i] = input.nextInt();
        j++;

        //SortMethod.sort(list, list.length);
        SelectionSort.sort(list);
        //BubbleSort.sort(list);
        System.out.print("Sorted numbers: ");

        for(int p= 0; p<list.length; p++){  
            if (list[p] !=0)

                System.out.print(list[p] + " ");
        }
        System.out.print("\n");
    }   
    System.out.println("Done!");
}
}

这是我的选择排序:

public class SelectionSort {


public static void sort (int[] list){
    for(int i=0; i<list.length; i++)
     {
        for(int j=i+1; j<list.length; j++)
        {
            if(list[i] > list[j] )
            {
                int temp = list[j];
                list[j] = list[i];
                list[i] = temp;
            }
        }
     }
 }
}

提前致谢!

3 个答案:

答案 0 :(得分:1)

为什么不使用List来自jdk的数组和随时可用的排序实现 - &gt; Collections.sort()

无论如何,问题在于您是将新整数插入已排序的数组中并导致代码失效。因此,当您在索引0,1,2,3,4上插入新元素时,排序算法会将它们移动到位置5,6,7,8,9。从这一点开始,您的输入开始使用输入中的新值来覆盖已排序的值 - (主循环i> = 5)。总而言之,它接受了10个整数,但其中有5个是有点过分的。

以下是您工作的小修改版本。分析它!

import java.util.*;

public class test {

    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner input = new Scanner(System.in);

        int j = 1;
        int[] list = new int[11];

        System.out.println("Enter 10 integers - one at a time...");

        for (int i = 0; i < list.length - 1; i++) {

            System.out.print("Enter integer #" + j + ": ");
            list[0] = input.nextInt();
            j++;

            //SortMethod.sort(list, list.length);
            SelectionSort.sort(list);
            //BubbleSort.sort(list);
            System.out.print("Sorted numbers: ");

            for (int p = 1; p < list.length; p++) {
                if (list[p] != 0)

                    System.out.print(list[p] + " ");
            }
            System.out.print("\n");
        }
        System.out.println("Done!");
    }
}

class SelectionSort {

    public static void sort(int[] list) {
        for (int i = 0; i < list.length; i++) {
            for (int j = i + 1; j < list.length; j++) {
                if (list[i] > list[j]) {
                    int temp = list[j];
                    list[j] = list[i];
                    list[i] = temp;
                    i--;
                    break;
                }
            }
        }
    }
}

答案 1 :(得分:0)

您正在使用list[i] = input.nextInt();替换每个输入的排序值。因此,5中的0值始终为list。使用List<Integer>代替int[],并为List<Integer>添加新值。请尝试以下代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner (System.in);
    int j = 1;
    List<Integer> list = new ArrayList<>();

    System.out.println("Enter 10 integers - one at a time...");

    for (int i = 0; i < 10; i++){

        System.out.print("Enter integer #" + j + ": ");
        list.add(input.nextInt());
        j++;

        //SortMethod.sort(list, list.length);
//        SelectionSort.sort(list);
        Collections.sort(list);
        //BubbleSort.sort(list);
        System.out.print("Sorted numbers: ");

        for(int p= 0; p<list.size(); p++){  
            if (list.get(p) !=0)
                System.out.print(list.get(p) + " ");
        }
        System.out.print("\n");
    }   
    System.out.println("Done!");
}

答案 2 :(得分:0)

我刚刚修改了我放置的注释(temp声明和for循环)下面的行。 此更改也使程序支持负数,请阅读以下注释:

import java.util.*;

public class test {

static Scanner input = new Scanner(System.in);

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner input = new Scanner(System.in);

    int j = 1;
    int[] list = new int[11];

    System.out.println("Enter 10 integers - one at a time...");

    for (int i = 0; i < list.length - 1; i++) {

        System.out.print("Enter integer #" + j + ": ");

    // Add temporal variable to store input
        int temp = input.nextInt();
    // Check for empty place in list (as far as it seems you don't care about zeros)
        for (int p = 0; p < list.length; p++) {
                if (list[p] == 0) {
                    list[p] = temp;
                    break;
                }
        }

        j++;

        //SortMethod.sort(list, list.length);
        SelectionSort.sort(list);
        //BubbleSort.sort(list);
        System.out.print("Sorted numbers: ");

        for (int p = 1; p < list.length; p++) {
            if (list[p] != 0)

                System.out.print(list[p] + " ");
        }
        System.out.print("\n");
    }
    System.out.println("Done!");
}
}