无法排序或打印出数组

unable to sort or print out array

我的任务是将方法编写为 1. 获取信息并将其保存到数组中,2. 复制数组(仅使用先前给定的参数)和 3. 对数组进行降序排序.在我看来,我的前两部分工作正常,但我一直坚持使用第三种方法 2 天,没有任何进展。我还在学习 java 所以我很确定我在某个地方犯了一个愚蠢的错误。提前致谢。

import java.util.*;
public class RevisionExercise {
    public static void main(String[] args) {
      
        int[] tempArray = new int[100];
        System.out.println("Type in numbers. Type zero to quit.");
        int amountOfNumbers = askInfo(tempArray);
       
        int[] realArray = new int[amountOfNumbers];
        copyInfo(realArray, tempArray);
      
        setArray(realArray);
        
        printArray(realArray);
    }
    public static int askInfo(int[] tempArray) {
        Scanner reader = new Scanner(System.in);
        int i;
        for (i = 0; i < tempArray.length; i++) {
            System.out.print((i+1) + ". number: ");
            tempArray[i] = reader.nextInt();
            if (tempArray[i] == 0) {
                return tempArray[i];    
            }
        }
        return i;
    }   
    
    private static int[] copyInfo(int[] realArray, int[] tempArray)
    {
        int targetIndex = 0;
        for( int sourceIndex = 0;  sourceIndex < tempArray.length;  sourceIndex++ )
        {
            if( tempArray[sourceIndex] != 0 )
                tempArray[targetIndex++] = tempArray[sourceIndex];
        }
        realArray = new int[targetIndex];
        System.arraycopy( tempArray, 0, realArray, 0, targetIndex );
        return realArray;
    }
    
    public static int[] setArray(int[] realArray)
    {
        int temp = 0;
        for (int i = 0; i <realArray.length; i++) {     
          for (int j = i+1; j <realArray.length; j++) {     
              if(realArray[i] >realArray[j]) {
                 temp = realArray[i];    
                 realArray[i] = realArray[j];    
                 realArray[j] = temp;    
               }     
            }
        }  
        return realArray;
    }   

    public static void printArray(int[] realArray ) {
        System.out.println("\nOrdered array: ");
        for(int i = 0; i < realArray .length; i++) {
            System.out.println(realArray [i]);
        }
    }
}

我得到的输出看起来像这样。

Type in numbers. Type zero to quit.
1. number: 3
2. number: 8
3. number: 5
4. number: 6
5. number: 9
6. number: 0

Ordered array:

虽然它应该是这样的:

Type in numbers. Type zero to quit.
1. number: 3
2. number: 8
3. number: 5
4. number: 6
5. number: 9
6. number: 0

Ordered array: 
9
8
6
5
3

您在计算用户输入的总数时出错。你的函数总是 return 0。所以把它改成这样:

public static int askInfo(int[] tempArray) {
    Scanner reader = new Scanner(System.in);
    int totalNumbers = 0;
    for (int i = 0; i < tempArray.length; i++) {
        System.out.print((i+1) + ". number: ");
        int number = reader.nextInt();
        if (number != 0) {
            totalNumbers++;
            tempArray[i] = number;
        } else {
            break;
        }
    }
    return totalNumbers;
}

将排序功能更改为:

public static void setArray(int[] realArray) {
    int temp = 0;
    for (int i = 0; i < realArray.length; i++) {
        for (int j = i+1; j < realArray.length; j++) {
            // Use < for descending order and > for ascending order
            if(realArray[i] < realArray[j]) {
                 temp = realArray[i];
                 realArray[i] = realArray[j];
                 realArray[j] = temp;
            }
        }
    }
}

你的主程序

public static void main(String[] args) {

    int[] tempArray = new int[100];
    System.out.println("Type in numbers. Type zero to quit.");
    int amountOfNumbers = askInfo(tempArray);

    int[] realArray = new int[amountOfNumbers];
    copyInfo(tempArray, realArray, amountOfNumbers);    

    setArray(realArray);

    printArray(realArray);
}

public static int askInfo(int[] tempArray) {
    Scanner reader = new Scanner(System.in);
    int totalNumbers = 0;
    for (int i = 0; i < tempArray.length; i++) {
        System.out.print((i+1) + ". number: ");
        int number = reader.nextInt();
        if (number != 0) {
            totalNumbers++;
            tempArray[i] = number;
        } else {
            break;
        }
    }
    return totalNumbers;
}

private static void copyInfo(int[] tempArray, int[] realArray, int size) {
    for( int sourceIndex = 0;  sourceIndex < size;  sourceIndex++ )
    {
        realArray[sourceIndex] = tempArray[sourceIndex];
    }
}

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

public static void printArray(int[] realArray ) {
    System.out.println("\nOrdered array: ");
    for(int i = 0; i < realArray.length; i++) {
        System.out.println(realArray [i]);
    }
}

一般说明:您的每个方法 return 都是一个数组,但您从不使用此 return 值。

修复您的代码需要进行 2 处修改:

  1. 保留方法输出的值:

    realArray=copyInfo(realArray, tempArray);

    所以你把复制的结果放在realArray变量中。

  2. 您期望 askInfo 方法 return 输入数字的数量,但实际上您 return 最后输入数字的值。

    所以你必须 return i;

    而不是 return tempArray[i];

首先,在 askInfo 方法中,realArray 的大小将始终为 0,因为 amountOfNumbers 是 [=20= 的 return ]

if (tempArray[i] == 0) {
        return tempArray[i];
}

因为你的条件是 tempArray[i] == 0,所以你总是 returning 0。然后你的 copyInfo 方法是 returning 一个数组,但你没有收到任何东西returned 数组。我建议将您的 copyInfo 方法更改为

private static int[] copyInfo(int[] tempArray)
{
    // same
    int [] realArray = new int[targetIndex];
    // same 
}

和你的main方法

public static void main(String[] args) {
    //same
    int[] realArray = new int[amountOfNumbers];
    realArray = copyInfo(tempArray);
    // same
}