2015-07-23 3 views
-6

Вот мой код Java (ужасный алгоритм грубой силы, который я знаю, и это требование). Я думаю, что я инициализировал переменную j в цикле for перед любыми ссылками, однако, когда я запускаю предупреждения компилятора.Возможно, переменная не была инициализирована?

import java.util.Arrays; 

public class Brute { 

    public static void main(String[] args) { 

     String filename = "./collinear/input" + args[0] + ".txt"; 
     In f = new In(filename); 
     int N = f.readInt(); 
     Point[] points = new Point[N]; 
     int x, y; 

     StdDraw.setScale(-10000, 50000); 

     for(int i = 0; i < N; i++) { 
      x = f.readInt(); 
      y = f.readInt(); 
      points[i] = new Point(x, y); 
      points[i].draw(); 
     } 

     Arrays.sort(points); 


     int i, j, k, l; 

     for(i = 0; i < N; i++) 
      for(j = 0; j < N; j++) 
       if(points[j] == points[i]) continue; 
       for(k = 0; k < N; k++) 
        if((points[k] == points[i]) || (points[k] == points[j])) continue; 
        for(l = 0; l < N; l++) { 
         if((points[l] == points[i]) || (points[l] == points[j]) 
          || (points[l] == points[k])) continue; 
         if(points[i].slopeTo(points[j]) == points[i].slopeTo(points[k]) 
         && points[i].slopeTo(points[k]) == points[i].slopeTo(points[l])) { 
          StdOut.println(points[i].toString() 
          + " -> " + points[j].toString() 
          + " -> " + points[k].toString() 
          + " -> " + points[l].toString()); 

          points[i].drawTo(points[l]); 
         } 
        }  

    } 
} 

Brute.java:31: error: variable j might not have been initialized

if((points[k] == points[i]) || (points[k] == points[j])) continue;

Brute.java:33: error: variable j might not have been initialized

if((points[l] == points[i]) || (points[l] == points[j])

+1

Довольно глупая ошибка брекетов. – CoderNeji

+1

Разве ваша IDE не предупреждает вас о подозрительных отступах? – fge

ответ

7

брекеты Помещенные вокруг тела вашего, петлями.

Это:

for(j = 0; j < N; j++) 
    if(points[j] == points[i]) continue; 
    for(k = 0; k < N; k++) ..... 

является цикл одной линии, которая не делает ничего, а затем еще один цикл.

Вы имеете в виду это:

for(j = 0; j < N; j++) { 
    if(points[j] == points[i]) continue; 
    for(k = 0; k < N; k++) { 
     ..... 
    } 
} 
+1

Смотрите, дети, это то, что происходит, когда вы пытаетесь быть милыми и умными и использовать новые «ярлыки» кодирования, которые вы узнали. – CubeJockey

+0

Они могут пригодиться, но не всегда. Честно говоря, если фигурные браслеты - это ад для вас, чтобы использовать даже на одном лайнере, просто помещенном рядом с текстом. Вот как я это делаю с некоторыми из моих переменных, если я быстро настрою один и тот же объект с разными требованиями. – SomeStudent

Смежные вопросы