2013-07-19 2 views
0

Как вы это сделаете? Он говорит, что не может найти vaiable AL в функции addint. как добавить int в Arraylist по разным функциям?Как добавить int в ArrayList по различным функциям

/** 
* Constructor 
*/ 
public Player() 
{ 
    ArrayList<int> AL = new ArrayList(); 
} 

public void addint(int C){ 
    AL.add(C); 
} 
+0

Я думаю, что такие вопросы являются божественными вмешательствами, которые испытывают переполнения сообщества стека ... – mostruash

+0

@mostruash Почему вы так думаете? – aaronman

+0

@aaronman Шесть ответов и десятки изменений за несколько секунд заставили меня подумать об этом. Я могу быть не прав. – mostruash

ответ

7

Вы объявили переменную AL внутри конструктора (локальная переменная) и выходит за рамки в методе addInt.

Объявление AL за пределами конструктора, но в пределах класса. Также используйте Integer, а не примитивный тип int для параметра типового типа. (Примитивные типы не допускаются в качестве параметров универсального типа.)

public class Player 
{ 
    // Declare it here. 
    private ArrayList<Integer> AL; 

    public Player() 
    { 
     // Initialize it here. 
     AL = new ArrayList<Integer>(); 
    } 
    // Now you can access `AL` in your methods. 
    public void addint(int C){ 
     AL.add(C); 
    } 
} 
0
  1. Вы должны использовать класс Wrapper Integer вместо int при определении, что ArrayList.

    ArrayList<Integer> AL = new ArrayList<Integer>(); 
    
  2. Сделать ArrayList<Integer> AL переменную экземпляра. В настоящее время это локальная переменная.

+3

Это половина проблемы , –

+0

'addint()' уже находится в определении класса. – mostruash

+0

Нет, требуются классы-оболочки. Это была бы ошибка. –

4

Вы должны определить ArrayList<Integer> AL (не ArrayList<int>, вы не можете использовать примитивные типы в дженериков) в поле вашего класса, вы в настоящее время его определения как параметр в вашем конструкторе класса. Кроме того, не забудьте всегда программировать на интерфейсы, а не на реализацию классов, поэтому вместо этого укажите переменную как List<Integer>.

public class Player { 
    private List<Integer> AL; 
    public Player() { 
     AL = new ArrayList<Integer>(); 
    } 
    public void addint(int C){ 
     AL.add(C); 
    } 
} 

Подробнее:

+0

+1 для образовательной связи. –

1

В Java вы не можете использовать примитивы как int в дженериков. Вы должны использовать Integer, который является классом-оболочкой для int

ArrayList<Integer> AL = new ArrayList<Integer>(); 

Кроме того, кажется, что AL должен быть переменной-члена, если вы хотите, чтобы работать правильно не объявлена ​​внутри конструктора. Я думаю, что это то, что вы хотите:

public class Player { 
    private List<Integer> AL; 
    public Player() { 
     AL = new ArrayList<Integer>(); 
    } 
    public void addint(int C){ 
     AL.add(C); 
    } 
} 
+0

@PaulBellora приятно поймать, сомневаюсь, что это важно, никто не увидит :) – aaronman

2

Вам необходимо указать поле, и использовать <Integer> вместо <int>:

/** 
* Constructor 
*/ 
ArrayList<Integer> AL; 
public Player() 
{ 
    this.AL = new ArrayList<Integer>(); 
} 

public void addint(int C){ 
    this.AL.add(C); 
} 
3

Самый простой способ:

public class Player { 
    private final List<Integer> al = new ArrayList<Integer>(); 

    public void addint(int c){ 
     al.add(c); 
    } 
} 
  • Переменная должна достижима.
  • Вам не нужен конструктор для этого случая, но вы можете, если хотите.
  • Мы обычно склонны referernce интерфейса List как это делает его легче изменить реализацию позже (проверить Joshua Bloch книги)
  • Вы не можете использовать примитивные типы, как дженерик, но вы можете добавить примитив к списку благодаря к автообношению.
  • Вы можете использовать new ArrayList<>(); с Java7.
  • Вы должны следовать правилам именования переменных Java. Верхний индекс обычно означает константы.
+1

Сохранение конструктора - это хороший стиль и упрощает изменение экземпляра позже, если это необходимо. –

+0

@ KenoguLabz, который зависит от дизайна. –

+1

@LuiggiMendoza Не совсем. Конструктор всегда более гибкий, чем определение на месте, и он помогает отделить ваши данные от вашей логики. –

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