2014-10-23 4 views
0

У меня есть программа, но я не понимаю, как я могу получить доступ к информации от одного конкретного объекта другим способом. Это второстепенный образец моей программы, я хочу создать этот метод всадников в одном классе (так называемый Cyclist). Я хочу распечатать список всадников здесь, но я не понимаю, как ...Доступ к информации об объекте по другому методу

public void riders() { 
    //System.out.print(c1.getName()) 
    //this does not work. 
    //here I want to print out all the names of the riders, i.e. c1's name, c2's name... cn... 

} 



public void abilities() { 

    //Pardilla blir til! 
    Cyclist c1 = new Cyclist(); 

    c1.setName("Sergio Pardilla"); 
    c1.setMountain(75); 
    c1.setTimeTrial(60); 
    c1.setSprint(60); 
    c1.setAge(30); 

    System.out.println(c1.getName() + "'s abilities:"); 
    System.out.println("Mountain - " + c1.getMountain()); 
    System.out.println("TimeTrial - " + c1.getTimeTrial()); 
    System.out.println("Sprint - " + c1.getSprint()); 
    System.out.println("Age - " +c1.getAge()); 

    } 
+1

Pass нужный объект в качестве параметра 'riders' метода – talex

+0

Вы можете не потому, что c1 является локальной переменной, если вы хотите получить доступ к c1 в другом методе должно быть поле. –

+0

Вы должны хранить всех всадников в объекте, как 'Collection' – ToYonos

ответ

1

У вас нет видимости переменной c1 в методе riders(). c1 объявлен внутри способностей(), а затем его локальный к нему, только видимый внутри. Если вы хотите использовать переменную вне этого метода, вы должны использовать поле вместо локальной переменной или передать его как параметр для метода rider.

List<Cyclist> cyclists = new ArrayList<>(); // Declared as field 

public void riders() { 
    for (cyclist : cyclists){ 
     System.out.print(cyclist.getName()) 
    } 
} 



public void abilities() { 

//Pardilla blir til! 
Cyclist c1 = new Cyclist(); 

c1.setName("Sergio Pardilla"); 
c1.setMountain(75); 
c1.setTimeTrial(60); 
c1.setSprint(60); 
c1.setAge(30); 

System.out.println(c1.getName() + "'s abilities:"); 
System.out.println("Mountain - " + c1.getMountain()); 
System.out.println("TimeTrial - " + c1.getTimeTrial()); 
System.out.println("Sprint - " + c1.getSprint()); 
System.out.println("Age - " +c1.getAge()); 

cyclists.add(c1); //Add cyclist to cyclists list 
} 
+0

Cheers mate, это имеет смысл. Но почему вы объявляете Arraylist «списком»? – p3ob2lem

+0

@ p3ob2lem Подклассы ArrayList ArrayList, а слабая декларация в порядке, если вам нужен только контракт List, в некоторых наборах стилей стиля Java. – hexafraction

+0

Вы всегда должны найти доступную абстракцию более высокого уровня. Я мог бы объявить ее как Collection, более высокую абстракцию списка, но это гонка, и вам, вероятно, нужен какой-то порядок. – Ezequiel

0

c1 определяется локально в методе способностей(). Другие методы не могут получить к нему доступ. Вам либо нужны способности для возврата c1, чтобы вы могли использовать его в других методах, либо вы можете объявить поле в этом классе для хранения c1.

1

Cyclist c1 ограничен в пределах возможностей метода способностей, поэтому вы не можете получить к нему доступ в методе riders().

Прежде всего, я бы сохранил экземпляр класса ArrayList of Cyclists, объявленного в верхней части класса.

private ArrayList<Cyclist> cyclists = new ArrayList<Cyclist>(); 

Затем в методе способностей, вы должны добавить c1 к ArrayList велосипедистов, как

cyclists.add(c1); 

после того как вы изменили параметры c1 в. Тогда из гонщиков() метод, вы можете получить имя c1 с

cyclists.get(0).getName(); 
+0

Почему велосипедисты должны быть статическими? – Ezequiel

+0

Вы правы, методы OP не статичны - я удалю статическое ключевое слово. Благодаря! – thatnerd2

+0

Большое спасибо! – p3ob2lem

0

коротко: вы не можете получить доступ к объектам из метода, которые только объявлены в другом методе

1) Пусть riders принять Cyclist объект , а затем передать объект.

или

2) делает Cyclist надклассовые:, доступной

public class XY { 
    private Cyclist c1; 

    public void riders() { 
     // show stuff 
    } 

    public void abilities() { 
     // init stuff 
    } 

} 

Кроме того, если и хотят вывести все Велосипедист, рассмотреть вопрос об использовании List<Cyclist>, который должен хранить каждый Cyclist объект.

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