2010-07-03 324 views
4

執行完我的用java寫的程序後我看到這個輸出:java result:2147483647。這個數字意味着什麼?「java result」是什麼意思?

這是代碼。它實際上應該在一個acm問題解決方案上運行隨機測試案例!沒辦法正常停止!當我手動停止它,我看到這樣的輸出:

Java結果:2147483647 BUILD SUCCESSFUL(總時間:8分49秒)

我只是想知道是什麼號碼意味着什麼?

package acm; 
import java.util.Random; 
import java.util.Scanner; 
import java.util.Vector; 
public class mamoth { 
static Scanner input = new Scanner(System.in); 
public static String planets; 
public static int H; 
public static int A; 
public static Random random = new Random(); 

public static void main(String []args) 
{ 
    while(!(planets = /*input.nextLine()*/Integer.toString(random.nextInt(10)+1) + " " + Integer.toString(random.nextInt(10)+1)).equals("0 0")){ 
     System.out.println(planets); 
    //while(!(planets = input.nextLine()).equals("0 0")){ 
     int index; 
     index = planets.indexOf(' '); 
     H = Integer.valueOf(planets.substring(0, index)); 
     A = Integer.valueOf(planets.substring(index+1)); 
     Vector<Integer> humanPlanets = new Vector<Integer>(); 

     String temp = "1 0"; 
     for(int i=0;i<H-1;i++){ 
      temp += " 1 0"; 
     } 

     planets = /*input.nextLine()*/temp; 
     System.out.println(planets); 
     //planets = input.nextLine(); 
     int index1 = 0; 
     int index2; 
     while((index2 = planets.indexOf(' ',index1))!=-1){ 
      humanPlanets.addElement(Integer.valueOf(planets.substring(index1, index2))); 
      index1= index2+1; 
     } 
     humanPlanets.addElement(Integer.valueOf(planets.substring(index1))); 

     Vector<Integer> aliasPlanets = new Vector<Integer>(); 

     temp = "0 0"; 
     for(int i=0;i<A-1;i++){ 
      temp += " 0 0"; 
     } 

     planets = /*input.nextLine()*/temp; 
     System.out.println(planets); 
     //planets = input.nextLine(); 
     index1 = 0; 
     while((index2 = planets.indexOf(' ',index1))!=-1){ 
      aliasPlanets.addElement(Integer.valueOf(planets.substring(index1, index2))); 
      index1= index2+1; 
     } 
     aliasPlanets.addElement(Integer.valueOf(planets.substring(index1))); 

     int[][] distance = new int[H][A]; 
     for(int i=0;i<H;i++){ 

      temp = Integer.toString(random.nextInt(100)+1); 
     for(int b=0;b<A-1;b++){ 
      temp += " " + Integer.toString(random.nextInt(100)+1); 
     } 

      planets = /*input.nextLine()*//*Integer.toString(random.nextInt(100)+1) + " " + Integer.toString(random.nextInt(100)+1) + " " + Integer.toString(random.nextInt(100)+1)*/temp; 

      //planets = input.nextLine(); 
      index1 = 0; 
      int j =0; 
      while((index2 = planets.indexOf(' ',index1))!=-1){ 
       distance[i][j] = Integer.valueOf(planets.substring(index1, index2)); 
       index1= index2+1; 
       j++; 
      } 
      distance[i][j] = Integer.valueOf(planets.substring(index1)); 

     } 
     if(H>=A){ 

     int[][] minimumYearsToDefeat = new int[H][A]; 
     for(int i=0;i<H;i++){ 
      for(int j=0;j<A;j++){ 
       double x,y,z; 
       y = aliasPlanets.elementAt(j*2) + humanPlanets.elementAt(i*2+1)*distance[i][j]-humanPlanets.elementAt(i*2); 
       z = humanPlanets.elementAt(i*2+1) - aliasPlanets.elementAt(j*2+1); 
       if(z==0){ 
        if(y<=0) 
         x = distance[i][j]; 
        else 
         x = Integer.MAX_VALUE; 
       } 
       else{ 
       x = y/z; 
       } 
       if(x==0){ 
        x=1; 
       } 
       else if(x<0){ 
        x= Integer.MAX_VALUE; 
       } 
       minimumYearsToDefeat[i][j] = (int)Math.ceil(x); 
      } 
     } 

     for(int i=0;i<H;i++){ 
      for(int j=0;j<A;j++) 
       System.out.print(minimumYearsToDefeat[i][j]+" "); 
      System.out.println(); 
     } 

     int[] mins = new int[A];//meqdar dehi ba big integer 
     for(int i=0;i<A;i++){ 
      mins[i] = Integer.MAX_VALUE; 
     } 
     int[] minsWith = new int[A];//meqdar dehi ba -1 
     for(int i=0;i<A;i++){ 
      minsWith[i] = -1; 
     } 

     for(int i=0;i<A;i++){ 
      for(int j=0;j<H;j++){ 
       if(minimumYearsToDefeat[j][i]<mins[i]){ 
        mins[i] = minimumYearsToDefeat[j][i]; 
        minsWith[i] = j; 
       } 
      } 


      for(int p=0;p<A;p++){ 
       if(minsWith[i]==minsWith[p]&&p!=i&&mins[i]!=Integer.MAX_VALUE){ 
        correctingConflict(minimumYearsToDefeat, mins, minsWith, i, p, new Vector<Integer>()); 
       } 
      } 


     } 
     int result = 0; 
     for(int i=0;i<A;i++){ 
      if (mins[i]>result) 
       result = mins[i]; 

     } 
     if(result==Integer.MAX_VALUE){ 
      System.out.println("IMPOSSIBLE"); 
     } 
     else{ 
      System.out.println(result); 
     } 
    } 
     else{ 
      System.out.println("IMPOSSIBLE"); 
     } 
    } 
} 

public static void correctingConflict(int[][] W, int[] mins, int[] minsWith, int i, int p, Vector<Integer> vector){ 
    /*for(int v=0;v<A;v++){ 
    System.out.print(minsWith[v]+" "); 
    } 
    System.out.println(); 
    for(int v=0;v<vector.size();v++){ 
    System.out.print(vector.elementAt(v)+" "); 
    } 
    System.out.println();*/ 
    int nextMin1 = Integer.MAX_VALUE; 
    int nextMin2 = Integer.MAX_VALUE; 
    int nextMinWith1 = minsWith[i]; 
    int nextMinWith2 = minsWith[p]; 

    for(int q=0;q<H;q++){ 
     if(W[q][i]<nextMin1 && W[q][i]>=mins[i] && q!=minsWith[i] && !vector.contains(q)){ 
      nextMin1 = W[q][i]; 
      nextMinWith1 = q; 
     } 

    } 
    for(int q=0;q<H;q++){ 
     if(W[q][p]<nextMin2 && W[q][p]>=mins[p] && q!=minsWith[p] && !vector.contains(q)){ 
      nextMin2 = W[q][p]; 
      nextMinWith2 = q; 
     } 
    } 

    if(nextMin1<=nextMin2){ 
     if (nextMin1==mins[i]) { 
      vector.addElement(minsWith[p]); 
     } else { 
      vector.removeAllElements(); 
     } 
     mins[i] = nextMin1; 
     minsWith[i] = nextMinWith1; 

     //conflict checking 
     for(int s=0;s<A;s++){ 
       if(minsWith[i]==minsWith[s]&&s!=i&&mins[i]!=Integer.MAX_VALUE){ 
        correctingConflict(W, mins, minsWith, i, s, vector); 
        return; 
       } 
     } 

    } 
    else if(nextMin2<nextMin1){ 
     if (nextMin2==mins[p]) { 
      vector.removeAllElements(); 
      vector.addElement(minsWith[p]); 
     } else { 
      vector.removeAllElements(); 
     } 
     mins[p] = nextMin2; 
     minsWith[p] = nextMinWith2; 

     //conflict checking 
     for(int s=0;s<A;s++){ 
       if(minsWith[p]==minsWith[s]&&s!=p&&mins[p]!=Integer.MAX_VALUE){ 
        correctingConflict(W, mins, minsWith, p, s, vector); 
        return; 
       } 
     } 
    } 




} 

}

+3

你能在這裏包含程序代碼嗎? – 2010-07-03 08:02:08

+0

是的,我會 – Kamran 2010-07-03 08:21:05

回答

4

那麼,你如何執行你的計劃或你的程序做了你沒有顯示。我會猜想它可能是過程的退出代碼,雖然通常如果沒有任何錯誤,退出代碼爲0.

如果您想要更好的答案,請提供更多信息的問題。

+0

我在NetBeans中執行它。該程序是一個簡單的程序,實現一個acm問題的算法,它具有輸入和輸出,也具有遞歸功能。我忘記說的是,當它通常結束代碼爲0時,但是當我手動使用停止按鈕強制它停止時,我看到如下輸出:Java結果:2147483647 BUILD SUCCESSFUL(總計時間:8分鐘49秒) 我在想什麼,如果它是這個數字和內存之間的任何關係? – Kamran 2010-07-03 08:12:05

+3

2^31 == 2147483648.我要猜測-1已經被破壞了。 – sarnold 2010-07-03 08:18:05

+0

啊!所以結果會是0或-1? : - ? – Kamran 2010-07-03 08:21:43

0

讓Java代碼末尾明確與System.exit(0)

+0

其實這對我來說不是一個問題如何退出我只是想知道這個數字意味着什麼 – Kamran 2010-07-03 10:40:22

+2

Thorbjørn的回答是暗示如果沒有明確的退出價值,這個數字可能被用於代替它。這絕對是值得一試的:既快速又容易發現這一點,或排除它。 – sarnold 2010-07-03 10:52:30

2

你在代碼五個不同的地方分配Integer.MAX_VALUE;其中一個位置是mins陣列中的元素。

靠近你main()方法結束這段代碼可以從mins陣列打印出值:

int result = 0; 
    for(int i=0;i<A;i++){ 
     if (mins[i]>result) 
      result = mins[i]; 

    } 
    if(result==Integer.MAX_VALUE){ 
     System.out.println("IMPOSSIBLE"); 
    } 
    else{ 
     System.out.println(result); 
    } 
} 
    else{ 
     System.out.println("IMPOSSIBLE"); 
    } 

這裏有一個小的測試程序,找出哪些Integer.MAX_VALUE居然是:

$ cat test.java ; javac test.java ; java sars 
class sars { 
    public static void main(String args[]) { 
      System.out.println("Integer.MAX_VALUE: " + Integer.MAX_VALUE); 
    } 
} 
Integer.MAX_VALUE: 2147483647 

我在之前的評論中有一個關於-1漏過某處的錯誤 - 你嵌入了有趣的值五個時間到你的代碼。 :)我不知道哪一個漏出來,或者如果你的算法實際上按照它應該的那樣工作。祝你好運狩獵下來:)但至少與您的完整代碼張貼,有人可能會幫助您找到我們都失蹤。

+0

我確定程序沒有明確地打印出MAX_VALUE,因爲它確定無論打印什麼代碼,它都不是我的!它的顏色是紅色的,意思是它沒有用戶編碼! – Kamran 2010-07-03 10:44:25

+0

你可以使用一些其他的整數作爲你的標記值嗎?使用16000而不是'Integer.MAX_VALUE',看看你的紅色數字是否仍然是2147483647或者它是16000? – sarnold 2010-07-03 10:50:05

+0

是的!我試過,數字仍然是2147483647.另一件要提到的是,當我想嘗試你所說的我開始和停止該程序幾次以獲得輸出!我不知道它什麼時候想要出現?! – Kamran 2010-07-03 14:59:41

1

如果您有一個默認的NetBeans項目,並且您從NetBeans啓動它,那麼它將由Ant使用生成的構建腳本啓動,該腳本位於項目目錄中。要縮小這個問題,請嘗試從命令行自己啓動程序:

java acm.mamoth 
+0

hm。我認爲你是對的,我將閱讀Ant的文檔來獲得我的答案! – Kamran 2010-07-04 06:22:11

1

這是因爲日期和時間。 這意味着您有一些在當前日期和時間之後的某個日期或時間編輯的文件。將日期和時間設置爲有效日期,然後運行程序。