2014-09-08 4 views
-1

Итак, я создавал класс java класса «Tile», и я добавил ArrayList, чтобы сохранить эти фрагменты в нем. И мне захотелось пройти через массив и распечатать детали каждой плитки. Я получаю одинаковый вывод . Вот главный класс:Получение такого же результата в ArrayList Java

package com.OriginsB; 

import java.util.ArrayList; 

public class Main { 
    private static final int range = 5; 
    public static ArrayList<Tile> tilearr = new ArrayList<Tile>(range); 
    public static void main(String[] args) { 
      for(int i=1; i<range; i++){ 
       tilearr.add(new Tile(i, i+1)); 
      } 
      for(int i=0; i<tilearr.size(); i++){ 
       System.out.println(tilearr.get(i)); 
      } 
    } 
} 

А вот класс плитки:

package com.OriginsB; 

public class Tile { 

    private static int ID; 
    private static int Pos; 

    public Tile(int ident, int Position){ 
     Pos = Position; 
     ID = ident; 
    } 

    @Override 
    public String toString(){ 
     return "Tile with ID: "+ID+" with pos: "+Pos; 
    } 
} 

Я получаю тот же результат:

Tile with ID: 4 with pos: 5 
Tile with ID: 4 with pos: 5 
Tile with ID: 4 with pos: 5 
Tile with ID: 4 with pos: 5 

Помощь?

ответ

1

Это потому, что ваши переменные являются статическими.

Это означает, что если вы установите значение, это будет для всех экземпляров Tile.

изменение

private int ID; 
private int Pos; 
2

Вы объявили ID и Pos как static делает их глобальными по отношению к классу Tile. Удалите static, если вы хотите другой вывод:

private int ID; 
private int Pos; 
0

Снимите static перед тем ID и Pos.

+0

Не могли бы вы подробнее рассказать о своем ответе? Это просто комментарий, который поможет OP запустить свою программу, но не объясняет, почему ваше решение работает. –

0

Изменить Tile.java ниже

// Статический модификатор удален.

public class Tile { 

    private final int ID; 
    private final int Pos; 

    public Tile(int ident, int Position) { 
     Pos = Position; 
     ID = ident; 
    } 

    @Override 
    public String toString() { 
     return "Tile with ID: " + ID + " with pos: " + Pos; 
    } 

выход

Tile with ID: 1 with pos: 2 
Tile with ID: 2 with pos: 3 
Tile with ID: 3 with pos: 4 
Tile with ID: 4 with pos: 5 
0

Вам не нужно static для ID и Pos, вы можете использовать этот код:

private int ID; 
private int Pos; 
0

Проблема состоит в том, что поля класса Tile являются STATIC. Из-за этого они созданы для класса не для каждого экземпляра класса. Рабочий код для измененного класса плитки выглядит следующим образом:

public class Tile { 

    private int ID; 
    private int Pos; 

    public Tile(int ident, int Position){ 
     Pos = Position; 
     ID = ident; 
    } 

    @Override 
    public String toString(){ 
     return "Tile with ID: "+ID+" with pos: "+Pos; 
    } 
}