无法排序或打印出数组



我得到了一个任务来编写方法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

您在计算用户输入的总数时出错了。你的函数总是返回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]);
}
}

首先,在askInfo方法中,realArray的大小将始终为0,因为amountOfNumbers

的返回值
if (tempArray[i] == 0) {
return tempArray[i];
}

,因为您的条件是tempArray[i] == 0,因此您总是返回0。然后你的copyInfo方法返回一个数组,但是你没有接收返回的数组。我建议将您的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
}

总则:你的每个方法都返回一个数组,但是你从不使用这个返回值。

有两个必要的修改来修复你的代码:

  1. 保留方法输出的值:

    realArray=copyInfo(realArray, tempArray);

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

  2. 您期望askInfo方法返回输入的数字的个数,但实际上您返回的是最后输入的数字的值。

    return tempArray[i];改为return i;

最新更新