0

好的,这是一个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;
            }
        }
     }
 }
}

提前致谢!

4

3 回答 3

1

为什么不使用Listjdk -> 中的数组和现成的排序实现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;
                }
            }
        }
    }
}
于 2013-10-24T05:59:39.330 回答
0

list[i] = input.nextInt();您正在用每个输入替换排序值 。所以,5值总是0list. 使用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!");
}
于 2013-10-24T06:24:57.937 回答
0

我刚刚修改了我放置的注释下方的行(临时声明和 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!");
}
}
于 2013-10-24T06:25:37.507 回答