我有一個任務是將方法寫入 1. 獲取資訊并將其保存到陣列中,2. 復制陣列(僅使用先前給定的引數)和 3. 將陣列按降序排序。在我看來,我的前兩個部分作業正常,但我已經堅持使用第三種方法兩天了,沒有任何進展。我還在學習 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
uj5u.com熱心網友回復:
首先,在該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
}
uj5u.com熱心網友回復:
一般備注:您的每個方法都回傳一個陣列,但您從不使用此回傳值。
修復代碼需要進行 2 次修改:
保持方法輸出的值:
realArray=copyInfo(realArray, tempArray);所以你把副本的結果放在
realArray變數中。您希望 askInfo 方法回傳輸入的數字的數量,但實際上您回傳的是最后輸入的數字的值。
所以,而不是
return tempArray[i];你必須return i;
uj5u.com熱心網友回復:
您在計算用戶輸入的總數時出錯。你的函式總是回傳 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]);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339097.html
上一篇:Php組物件陣列
