插入排序。无法打印排序值

时间:2014-07-03 16:19:41

标签: java for-loop insertion-sort

我是java新手,我们的任务是进行插入排序,但我的代码有点问题我无法打印我的Sorted值我无法弄清楚我的错误在哪里。 。请帮我。谢谢

import java.util.Scanner;
public class Sorting {

public static void main(String[] args){
System.out.println("Enter 10 numbers to be sorted separated with spaces:");
String values = new Scanner(System.in).nextLine();
 String [] Vstring = values.split(" ");
 int [] num = new int[Vstring.length];

 for(int i = 0; i<num.length; i++){
    num[i]=Integer.parseInt(Vstring[i]);

     }

     }
     public static void insertionSort(int[] list, int n){
     for(int i = 0; i<n; i++)
      {
        int key = list[i];
        int j = i-1;
        while(j >=0 && list[j]>key){
            list[j+1] = list[j];
            j=j-1;
        }

        list[j+1] = key;
        }


        }

       public static void printValues(int [] list){
       for (int i = 0; i<list.length; i++){
           System.out.println(list[i]+"");
       }
      System.out.println();
     }
     }

4 个答案:

答案 0 :(得分:0)

首先,您在main中嵌套了一个函数。我不认为你能做到这一点。请将它们分开(我将展示一个示例),看看它是否对您有所帮助。另外,请注意用户输入。假设用户将犯错,并进行防御性编程。如果我输入&#34;你好&#34;进入这个计划?它会抛出一个困难的例外并崩溃。尽量防止这种事情。

另外,我不知道Java中的数组是否可以是passed by reference,所以我已经修改了你的排序方法以返回新的&#34;排序&#34;阵列。

public static void main(String[] args){

System.out.println("Enter 10 numbers to be sorted separated with spaces:");

String values = new Scanner(System.in).nextLine();

 String [] Vstring = values.split(" ");
 int [] num = new int[Vstring.length];

 for(int i = 0; i< num.length; i++){
      num[i] = Integer.parseInt(Vstring[i]);
 }

 num = insertionSort(num, num.length);
 printValues(num);

}

 public static int[] insertionSort(int[] list, int n){
     for(int i = 0; i<n; i++)
      {
        int key = list[i];
        int j = i-1;
        while(j >=0 && list[j]>key){
            list[j+1] = list[j];
            j=j-1;
        }

        list[j+1] = key;
        }

      return list;

  }


  public static void printValues(int [] list){
       for (int i = 0; i<list.length; i++){
           System.out.println(list[i]+"");
       }

       System.out.println();

  }

答案 1 :(得分:0)

尝试使用此代码,您应该在main方法中调用insertionSort(num, num.length)方法和printValues(int[] list)。我也修改了insertionSort方法的返回类型。

public static void main(String[] args) {
    System.out.println("Enter 10 numbers to be sorted separated with spaces:");
    String values = new Scanner(System.in).nextLine();
    String[] Vstring = values.split(" ");
    int[] num = new int[Vstring.length];

    for (int i = 0; i < num.length; i++) {
        num[i] = Integer.parseInt(Vstring[i]);

    }

    int[] result=insertionSort(num, num.length);
    printValues(result);
}

public static int[] insertionSort(int[] list, int n) {
    for (int i = 0; i < n; i++) {
        int key = list[i];
        int j = i - 1;
        while (j >= 0 && list[j] > key) {
            list[j + 1] = list[j];
            j = j - 1;
        }

        list[j + 1] = key;
    }
    return list;
}

public static void printValues(int[] list) {
    for (int i = 0; i < list.length; i++) {
        System.out.println(list[i] + "");
    }
    System.out.println();
}

答案 2 :(得分:0)

问题是你没有在main中调用你的函数。你的代码会编译,(虽然你可能想要一些缩进/空格以便于阅读...... Ctrl + A然后Ctrl +我会有所帮助)但是你不会得到任何结果。

以下是您需要做的事情:

import java.util.Scanner;
public class Sorting {

    public static void main(String[] args){

        System.out.println("Enter 10 numbers to be sorted separated with spaces:");
        String values = new Scanner(System.in).nextLine();
        String [] Vstring = values.split(" ");
        int [] num = new int[Vstring.length];

        for(int i = 0; i<num.length; i++){
            num[i]=Integer.parseInt(Vstring[i]);
        }

        //HERE!!!!! Call the functions!
        insertionSort(num, num.length); 
        printValues(num);

    }

    public static void insertionSort(int[] list, int n){
        for(int i = 0; i<n; i++)
        {
            int key = list[i];
            int j = i-1;
            while(j >=0 && list[j]>key){
                list[j+1] = list[j];
                j=j-1;
            }

            list[j+1] = key;
        }
    }

    public static void printValues(int [] list){

        for (int i = 0; i<list.length; i++){
            System.out.println(list[i]+"");
        }
        System.out.println();
    }
}

我希望它有所帮助! :)

答案 3 :(得分:-1)

您不会调用printValues函数。您也不会调用排序功能。函数内的代码只有在调用后才会执行。 此外,我建议缩进代码,以便两个括号内的东西缩进两次等。