2016-09-29 3 views
0

Код, с которым я работаю, приведен ниже. Я чувствую, что это должно быть просто, но на этой неделе мне очень сложно сосредоточиться, и мне нужна помощь.Классы и 2 массива измерений

Я не могу правильно установить значения для pt.x или pt.y во вложенных циклах. IDEA говорит мне, что символ не может быть разрешен. Класс идентифицируется из другого java-файла в пакете, который идентифицирует только этот класс. это выглядит следующим образом:

public class pointClass { 
    class point{ 
     int x; 
     int y; 
     int z; 
    } 
} 

(Добавление текста, чтобы продемонстрировать эти 2 отдельные файлы)

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

public class main { 
    public static void main (String args[]){ 

     ArrayList<pointClass.point> pointlist = new ArrayList<>(); 

     //Creating map 
     int row = 40; 
     int col = 40; 
     int [][] bigarray = new int [row] [col]; 

     //iterating through map 
     for (int i = 0; i < row; i++;){ 
      for (int j=0; j< col; j++){ 
       pointClass pt = new pointClass.point; 
       pt.x = row; 
       pt.y = col; 
       pt.z = ;//RNG HERE// 

      } 
     } 

Как мне лучше определить эти атрибуты класса? Для контекста этот код создает массив 40x40 и присваивает случайное значение каждому номеру. Для печати 2D-массива будет добавлена ​​еще одна строфа кода.

+2

Почему вы используете вложенный класс? – shmosel

ответ

0

Здесь, похоже, не требуется вложенный класс. Рассмотрим только следующее:

public class Point { 
    int x; 
    int y; 
    int z; 
} 

Теперь давайте рассмотрим ваши синтаксические ошибки. Большинство из них довольно просты, но тем не менее заслуживают обсуждения.

public class Main { 
    public static void main(String args[]){ 

     ArrayList<Point> pointlist = new ArrayList<>(); //Now that we aren't using a nested class, Just <Point>    

     //Creating map 
     int row = 40; 
     int col = 40; 
     int [][] bigarray = new int [row] [col]; 

     //iterating through map 
     for (int i = 0; i < row; i++){ //No semicolon after i++ 
      for (int j=0; j< col; j++){ 
       Point pt = new Point(); //Calling a constructor is a method, hence() 
       pt.x = j; //You probably mean j and k here, not row and col (which don't change) 
       pt.y = k; 
       pt.z = 0;//RNG HERE// //Not sure what you mean here, but you can set pt.z to whatever you want 

       //You created pointlist, but never add to it. Did you mean to? 
       pointlist.add(pt); 
      } 
     } 
    } 
} 

Я только что опробовал вышеуказанное, и он скомпилирован и работает правильно. Тем не менее, вы можете сделать намного лучше стилистически. Вот несколько советов.

  • Имена классов начинаются с прописной буквы. Point, а не point. PointClass, а не pointClass.
  • Нефинансовые/изменяемые поля должны быть закрытыми. Таким образом, ваш класс Point, в то время как правильный, является довольно плохой практикой (причины которой хорошо документированы в другом месте). Рассмотрим, используя следующую альтернативу:

    public class Point { 
        private int x; 
        private int y; 
        private int z; 
    
        public Point(int x, int y, int z) { 
         this.x = x; 
         this.y = y; 
         this.z = z; 
        } 
    
        public int getX() { return x; } 
        public int getY() { return y; } 
        public int getZ() { return z; } 
    } 
    
+0

Спасибо, Мшник. Я чувствую, что я не должен был совершать эти ошибки, но, увы, 40-часовая работа, предварительное тестирование и школа сделали мой мозг. Награда Upvote, мой представитель слишком мал, чтобы рассчитывать. – Dylan

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