簡體   English   中英

如何將int []數組傳遞給main(String [] args)?

[英]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數組。 簡單的方法是:

  1. 分配一個合適大小的int[] (即與String[] args數組大小相同),
  2. 遍歷數組的范圍,並且
  3. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM