2014-10-10 122 views
-1

我編寫了一個Java代碼來生成兩個整數之間的素數。 SPOJ中出現運行時錯誤(NZEC)。我怎樣才能解決這個問題?Java中的運行時錯誤(NZEC)

import java.util.Scanner; 
public class prime { 
    public static void main(String[] args) { 
     Scanner x = new Scanner(System.in); 
     Scanner y = new Scanner(System.in); 
     int m = x.nextInt(); 
     int n = y.nextInt(); 
     if (m >= 1 && n <= 1000000000 && n - m <= 100000) { 
      for (int current = m; current <= n; current++) { 
       int sqr_root = (int) Math.sqrt(current); 
       boolean is_prime = true; 
       for (int i = 2; i <= sqr_root; i++) { 
        if (current % i == 0) { 
          is_prime = false; // Current is not prime. 
        } 
       } 
       if (is_prime) { 
         System.out.println(current); 
       } 
      } 
     } 
     return; 
    } 
} 
+4

究竟什麼是* NZEC *和* * SPOJ?你究竟在哪裏得到錯誤? – 2014-10-10 07:06:36

+0

NZEC(非零退出代碼) - 此消息表示退出的程序返回一個不同於0的值給shell。對於像C這樣的語言,這可能意味着你忘了在程序結尾處添加「return 0」。對於解釋型語言(包括JAVA)NZEC通常意味着你的程序崩潰或引發了未捕獲的異常。 – 2014-10-10 07:09:15

+0

SPOJ(Sphere Online Judge)是一個在線評委系統,擁有超過20萬註冊用戶和20000多個問題。解決問題的方法可以用40多種語言提交。 SPOJ每天24小時都有快速增長的問題集/任務,其中包括與該項目相關的專家問題制定者社區準備的許多原始任務。 SPOJ允許高級用戶根據自己的規則和問題組織比賽。它還包括一個論壇,程序員可以討論他們如何解決特定問題。 – 2014-10-10 07:09:50

回答

1

的突出的錯誤是,你已經創建了兩個Scanner期從System.in閱讀。我懷疑這會造成一個例外;當然這是不明智的。

更改此

Scanner x = new Scanner(System.in); 
Scanner y = new Scanner(System.in); 
int m = x.nextInt(); 
int n = y.nextInt(); 

這個

Scanner x = new Scanner(System.in); 
int m = x.nextInt(); 
int n = x.nextInt(); 

這是假設,當然,前提是你真的想從標準輸入,而不是作爲命令行參數把你的價值觀。

(你可以從你的main方法擺脫return的。)

+0

我在行int m = x.nextInt()中得到一個空指針異常。 – 2014-10-10 09:33:27

+0

@abhishekKanodia然後我只能假設你沒有給程序提供任何輸入。您確定要從標準輸入中讀取數據,而不是在命令行上輸入參數嗎?對於需要兩個輸入來從標準輸入讀取它們的程序來說,這會很奇怪。 – 2014-10-10 09:45:02

+0

我想取兩個用戶輸入並顯示它們之間的所有素數。另外我想爲10個測試用例做這個。 – 2014-10-10 09:58:19