2013-05-02 5 views
0

Брифинг программы: Эта программа отслеживает людей, у которых есть карточные карточки авиакомпаний и сколько очков они собирают каждую неделю. (неделя1, 2, 3, 4). Информация хранится в массиве, который тогда, когда это необходимо, может выводиться нажатием «listButton».Как получить значение из списка массивов?

Я знаю, как получить значение из массива и просто вывести его, но не знаю, как это сделать с помощью цикла. Смотрите проблемную область под «totalPointsButton»

public class AirlineCardsView extends FrameView { 

    class airline { 
     String lastName, firstName; 
     int week1, week2, week3, week4; 

     airline (int _week1, int _week2, int _week3, int _week4, String _lastName, String _firstName) { 
      week1 = _week1; 
      week2 = _week2; 
      week3 = _week3; 
      week4 = _week4; 
      lastName = _lastName; 
      firstName = _firstName; 
     } 
    } 

    /** Define the ArrayList */ 
    ArrayList <airline> members = new ArrayList <airline>(); 

    public AirlineCardsView(SingleFrameApplication app) { 
     //GUI stuff 
    }// </editor-fold> 

    private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {           

     String lastName, firstName; 
     int week1, week2, week3, week4; 

     week1 = Integer.parseInt(weekOneField.getText()); 
     week2 = Integer.parseInt(weekTwoField.getText()); 
     week3 = Integer.parseInt(weekThreeField.getText()); 
     week4 = Integer.parseInt(weekFourField.getText()); 
     lastName = lastNameField.getText(); 
     firstName = firstNameField.getText(); 

     airline c = new airline(week1, week2, week3, week4, firstName, lastName); 
     members.add(c); 
    }           

    private void listButtonActionPerformed(java.awt.event.ActionEvent evt) {           

     String temp = ""; 

     for (int x=0; x<=members.size()-1; x++) { 
      temp = temp + members.get(x).firstName + " " 
        + members.get(x).lastName + ": " 
        + members.get(x).week1 + " " 
        + members.get(x).week2 + " " 
        + members.get(x).week3 + " " 
        + members.get(x).week4 + "\n"; 
     } 
     memberListTArea.setText(temp); 

    }    

Здесь я не уверен, как инициализировать значения week1, week2, week3, week4 (для Int totalPoints) с теми же значениями, хранящимися в массиве для соответствующего элемента.

private void totalPointsButtonActionPerformed(java.awt.event.ActionEvent evt) { 

     int week1, week2, week3, week4; 
     String lastName, firstName; 

     String points = ""; 

     for (int j = 0; j < members.size()-1; j++) { 
//this line checks the inputted name to see if it matches any stored in array. 
       if (members.get(j).lastName.equals(lastNameField.getText())) { 
        int totalPoints = week1 + week2 + week3 + week4; //then adds total points 
        } 
       } 

     } 
+0

Почему не просто 'members.get (j) .weekX'? Если я не понимаю, что вы пытаетесь сделать. – trutheality

ответ

1

Я надеюсь, что я правильно понял вопрос ....

  • во-первых, эта линия имеет проблема:

    for (int j = 0; j < members.size()-1; j++) { 
    

вы должны удалить -1 или использовать <= , в противном случае вы не достигнете последнего элемента.

  • if (members.get(j).lastName.equals(lastNameField.getText())) может выбросить NPE. (members.get(j).lastName может быть нулевым), также переменные, определенные в этом методе (week1-4, и lastname, firstname), не имеют большого смысла.

  • вы объявляете int totalPoints в том случае, если блок, то есть он не будет виден вне блока if. Это неважно, если вся ваша логика находится в блоке.

  • вы могли бы попробовать:

    Airline al = null; 
    int totalPoints; 
    for (int j = 0; j < members.size(); j++) { 
        al = members.get(j); 
        if (al.lastName.equals(lastNameField.getText())) { 
         totalPoints = al.week1 + al.week2 + al.week3 + al.week4; 
        } 
    } 
    

еще лучше:

int totalPoints; 
    for (Airline al:members) { 
     if (al.lastName.equals(lastNameField.getText())) { 
      totalPoints = al.week1 + al.week2 + al.week3 + al.week4; 
     } 
    } 
  • сделать коды выглядят лучше, вы могли бы рассмотреть возможность добавить геттер/сеттеры в вашем Airline классе. также добавьте метод, int getTotalPoints() вернуть сумму 4 недели. Тогда вам не нужно суммировать его за пределами класса.
0

Вы должны добавить методы получения и установки в свой класс авиакомпании. Поэтому, когда вы храните объект авиалинии в arraylist, вы можете получить свои значения, используя «members.get (j) .week1, members.get (j) .week2 и т. Д.»

Например, создайте свой класс авиакомпании, например это.

public class airline { 
    String lastName; 
    String firstName; 
    int week1; 
    int week2; 
    int week3; 
    int week4; 

    public airline (int week1, int week2, int week3, int week4, String lastName, String firstName) { 
     week1 = this.week1; 
     week2 = this.week2; 
     week3 = this.week3; 
     week4 = this.week4; 
     lastName = this.lastName; 
     firstName = this.firstName; 
    } 

    public int getWeek1(){ 
     return week1; 
    } 

    public void setWeek1(int newWeek1){ 
     week1 = newWeek1; 
    } 

    public int getWeek2(){ 
     return week2; 
    } 

    public void setWeek2(int newWeek2){ 
     week2 = newWeek2; 
    } 

    public int getWeek3(){ 
     return week3; 
    } 

    public void setWeek3(int newWeek3){ 
     week3 = newWeek3; 
    } 

    public int getWeek4(){ 
     return week4; 
    } 

    public void setWeek4(int newWeek4){ 
     week4 = newWeek4; 
    } 

    public String getFirstName(){ 
     return firstName; 
    } 

    public void setFirstName(String newFirstName){ 
     firstName = newFirstName; 
    } 

    public String getLastName(){ 
     return lastName; 
    } 

    public void setLastName(String newLastName){ 
     lastName = newLastName; 
    } 

    public String toString(){ 
     return getWeek1() + " " + getWeek2() + " " + getWeek3() + " " + getWeek4() + getFirstName() + " " + getLastName(); 
    } 
} 
+0

, и как Кент упомянул под вас объявленные int totalPoints в вашем поле if. вы должны объявить его снаружи с int totalPoints = 0 или int totalPoints; и внутри цикла for, и если предложение присваивает значения totalPoints простым написанием totalPoints = «то, что вы хотите, чтобы оно было назначено»; для циклов Kent упоминается намного лучше. – CronbachAlpha

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