[英]How to pass an int[] array into main(String []args)?
我正在嘗試編寫一個從main方法開始的程序,然后調用包含整數數組的方法。
本質上,該程序是一個基本提升,它假設所有輸入都在同一時間接收到。 升降機將要停下來的停靠點存儲在稱為停靠點的數組中,該數組是升降機的停靠點和升降機的停靠點的組合。
我希望程序從main開始,並調用對所有樓層等進行排序的方法。 但是,當我運行程序時,它將最終數組的所有值都更改為0。
為什么這樣做,在程序運行時需要做些什么才能使數組值保持不變?
這是主要方法:
public class user_interface {
public static void main(String[] args) {
floor_sorting.sorting_floors(args);
}
}
這是我嘗試調用的方法:
import java.util.*;
public class floor_sorting{
public static void sorting_floors(int[] args){
//bubble sort - sorts out user_up in ascending order
for (int i = 0; i < user_stops.user_up.length; i++) {
for (int x = 1; x < user_stops.user_up.length - i; x++) {
if (user_stops.user_up[x-1] > user_stops.user_up[x]){
int temp = user_stops.user_up[x-1];
user_stops.user_up[x-1] = user_stops.user_up[x];
user_stops.user_up[x] = temp;
}
}
}
//bubble sort again, but in descending order
for (int i = 0; i < user_stops.user_down.length; i++) {
for (int x = 1; x < user_stops.user_down.length - i; x++) {
if (user_stops.user_down[x-1] < user_stops.user_down[x]){
int temp = user_stops.user_down[x-1];
user_stops.user_down[x-1] = user_stops.user_down[x];
user_stops.user_down[x] = temp;
}
}
}
//merges the two separate arrays into one (user_up + user_down = stoppages)
int stoppages[] = new int[user_stops.user_up.length+user_stops.user_down.length];
System.arraycopy(user_stops.user_up, 0, stoppages,0, user_stops.user_up.length);
System.arraycopy(user_stops.user_down, 0, stoppages, user_stops.user_up.length, user_stops.user_down.length);
int c = 0;
do {
System.out.println("The lift has come to stop at floor " + stoppages[c]);
System.out.println("The lift has started moving again.");
c++;
} while (c < stoppages.length);
do {
System.out.println("This lift has stopped moving forever.");
} while (c!=stoppages.length);
}
}
上面的方法調用此方法:
import java.util.*;
public class user_stops {
//user_up array declaration
public static int user_up[] = new int [6];{
//Initialising data in array
user_up[0] = 1;
user_up[1] = 3;
user_up[2] = 2;
user_up[3] = 7;
user_up[4] = 5;
user_up[5] = 8;
}
//user_down array declaration
public static int user_down[] = new int [6];{
//user_down data initialisation
user_down[0] = 8;
user_down[1] = 5;
user_down[2] = 4;
user_down[3] = 2;
user_down[4] = 6;
user_down[5] = 1;
}
}
我希望程序從main開始,並調用對所有樓層等進行排序的方法。 但是,當我運行程序時,它將最終數組的所有值都更改為0。
您顯示給我們的代碼甚至不會編譯。 此行無效:
floor_sorting.sorting_floors;
如果您不向我們展示真實的代碼,我們將無法解釋程序的作用。
如果要使其編譯,則需要將String
數組轉換為int
數組。 簡單的方法是:
int[]
(即與String[] args
數組大小相同), Integer.parseInt(String)
轉換值。 閱讀Integer
類的javadocs ...
最后,您需要更加注意樣式:
上面的代碼很難閱讀,並且會讓您無休止地受到同事的批評/抱怨。 (它應該失去你的標記,如果這是一個顯着的分配。)
為了強制您的代碼運行,我僅更改了main()
的調用:
floor_sorting.sorting_floors(new int[]{1,2,3});
正如我在評論中提到的,輸入數組被忽略。 但是,它運行時確實打印出零。 (你是怎么知道的?)
原因是您在user_stops
使用了靜態成員。 這些是靜態的,意味着它們在任何時候都不會被實例化。 除非您意識到甚至類的靜態成員也不會總是被實例化,否則這並不明顯。
我在sorting_floors()
的頂部添加了以下語句:
user_stops user_stops_1 = new user_stops();
該程序現在可以按預期運行。 (繼續……嘗試一下。)盡管我沒有嘗試過,但另一可行的方法是在聲明中初始化靜態數組:
public static int user_up[] = new int [] {1, 3, 2, 7, 5, 8};
public static int user_down[] = new int [] {8, 5, 4, 2, 6, 1};
但是,如果您希望該程序正常運行,我認為您應該重新考慮對關鍵字static
使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.