2010-07-03 4 views
4

после выполнения моей программы, написанной в java, я вижу этот вывод: java result: 2147483647. что означает это число?Что означает «результат Java»?

это код. он должен фактически запускать случайные тестовые примеры по решению проблемы acm! нет возможности нормально остановиться! и когда я остановить его вручную, я вижу этот вывод:

Java Результат: 2147483647 BUILD УСПЕШНОГО (общее время: 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

Вы можете включить здесь код программы? –

+0

да это нормально, я буду – Kamran

ответ

4

Ну, вы не показали, как вы выполнение программы или что программа делает. Я бы угадать это может быть код выхода процесса, хотя обычно, если ошибок нет, код выхода равен 0.

Если вам нужен лучший ответ, предоставьте дополнительную информацию в вопросе.

+0

Я выполню его в NetBeans. программа представляет собой простую программу, которая реализует алгоритм для задачи acm, имеет входы и выходы, также имеет рекурсивную функцию.что я забыл сказать: да, когда он обычно заканчивается, код равен 0, но когда я вручную с кнопкой останова заставляю его останавливаться, я вижу такой вывод: Java Результат: 2147483647 BUILD SUCCESSFUL (общее время: 8 минут 49 секунды) Что я думаю о том, есть ли какое-либо отношение между этим числом и памятью? – Kamran

+3

2^31 == 2147483648. Я собираюсь угадать, что -1 был искалечен. – sarnold

+0

ahh! поэтому результат будет либо 0, либо -1? : -? – Kamran

0

Пусть конец кода Java явно с System.exit (0)

+0

На самом деле это не проблема для меня, как выйти. Я просто задаюсь вопросом, что означает число. – Kamran

+2

Ответ Thorbjørn предполагает, что без явного значения выхода, возможно, это число используется на своем месте. Это определенно стоит попробовать: быстро и легко обнаружить, что это оно, или исключить его. – sarnold

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

+0

Можете ли вы использовать какое-то другое целое число в качестве значения вашего стража? Используйте 16000 вместо 'Integer.MAX_VALUE', и посмотрите, осталось ли ваше красное число 2147483647 или если оно 16000 вместо? – sarnold

+0

да! я попробовал, и число все равно 2147483647. Еще одна вещь, о которой стоит упомянуть, - это когда я хотел попробовать, что ты сказал, я начал и несколько раз останавливал программу, чтобы получить выход! Я не знаю, когда он хочет появиться ?! – Kamran

1

Если у вас есть проект NetBeans по умолчанию, и вы запускаете его из NetBeans, он запускается Ant, используя сгенерированный скрипт сборки, который находится внутри вашего каталога проектов. Чтобы сузить проблему, попробуйте запустить программу самостоятельно из командной строки:

java acm.mamoth 
+0

hm. Думаю, ты прав, я буду читать документацию Анта, чтобы получить мой ответ! – Kamran

1

Это из-за даты и времени. Это означает, что у вас есть файлы, отредактированные в дате или времени после текущей даты и времени. установите дату и время на действительную дату, а затем запустите свою программу.

0

Это код выхода из процесса (JVM). В частности, это тот, который вы получите, когда вы его убьете. Unknown Java Result Message