2017-07-25 40 views
3

我遇到的問題與Java數組各地20000值,Java數組與各地20000值聲明

全陣列可以發現here

我的代碼:

public class UsableIDs { 

    private final static int idsArray[] = {615,616,617,618,...}; 
    private final static int ids = idsArray.length; 

    public static String checkID(int x){ 
     for(int i=0;i<ids;i++){ 
      if(x==idsArray[i]) 
       return "Usable"; 
     } 
     return "NotUsable"; 
    } 
} 

在我的另一種方法我試圖用下面的方法調用它:

String temp = UsableIDs.checkID(xyz); 

在這裏d oes程序崩潰總是崩潰

我使用NetBeans。

如果有人能幫助我得到這段代碼,我會很高興。

+0

爲什麼它崩潰? – hsz

+2

你的意思是* Programm崩潰總是崩潰*? – Blasanka

+0

您應該使用https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#binarySearch-int:A-int- here – 2017-07-25 11:42:49

回答

2

由於Java將靜態初始化程序塊的大小限制爲65535字節,您將看到該錯誤。最好將數據與源代碼分開,即將ID放入單獨的文件中。

下面的代碼與您的代碼相同,假設數組內的數據存儲爲(以逗號分隔的,沒有括號或換行符)到/temp/usableids.txt

import java.nio.file.Files; 
import java.nio.file.Paths; 

public class UsableIDs { 

    private final static int idsArray[]; 

    static { 
     try { 
      String fileData = new String(
       Files.readAllBytes(Paths.get("/temp/usableids.txt")), "UTF-8").trim(); 
      String[] ids = fileData.split(","); 
      idsArray = new int[ids.length]; 

      for (int i = 0; i < ids.length; i++) { 
       idsArray[i] = Integer.parseInt(ids[i]); 
      } 

     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    public static String checkID(int x) { 
     for (int i = 0; i < idsArray.length; i++) { 
      if (x == idsArray[i]) 
       return "Usable"; 
     } 
     return "NotUsable"; 
    } 
} 
+0

thx爲您提供幫助 – LosFaul

2

好吧,我已經測試過它自己了......它拋出的錯誤是Error:(13, 30) java: code too large,它是由數組初始化引起的,這個過程太長了。如果你需要這麼多元素,你最好通過循環生成它們或者從文件中讀取它們。

的ID的範圍是615 - 18630,所以下面的代碼應該做的伎倆:

public class UsableIDs { 

    private final static int LOWER_BOUND= 615; 
    private final static int UPPER_BOUND= 18630; 

    private final static int idsArray[] = generateIds(); 
    private final static int ids = idsArray.length; 

    private static int[] generateIds() { 
     int length = UPPER_BOUND - LOWER_BOUND + 1; 
     int[] array = new int[length]; 
     for(int i = 0; i < length; i++) { 
      array[i] = LOWER_BOUND+ i; 
     } 
     return array; 
    } 

    public static String checkID(int x){ 
     for(int i=0;i<ids;i++){ 
      if(x==idsArray[i]) 
       return "Usable"; 
     } 
     return "NotUsable"; 
    } 
} 
+1

或者他可以從資源中讀取它 –

+1

如果查看數據,範圍實際上是非連續的;有間隙,例如'698,700'和'792,800'。 –

+0

啊,在這種情況下,他不會從文件中讀取它。 – QBrute

1

靜態初始化有65535個字節的限制。所以它給你錯誤。相反,你可以把它放在文件中並讀入數組。 enter image description here