2010-07-03 709 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

这是因为日期和时间。 这意味着您有一些在当前日期和时间之后的某个日期或时间编辑的文件。将日期和时间设置为有效日期,然后运行程序。