我是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();
}
}
答案 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函数。您也不会调用排序功能。函数内的代码只有在调用后才会执行。 此外,我建议缩进代码,以便两个括号内的东西缩进两次等。