2013-11-30 5 views
0

Мне нужно распечатать всех студентов, у которых есть кредит из списка массивов.Печать из списка массивов

Значение всех студентов с суммой выше 0.

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

здесь текущий код

Удалены По личным причинам

+0

Вы уже используете 'if' в приведенном выше коде, чтобы вы могли проверить, имеет ли текущий студент в цикле кредит. Где проблема? Кроме того, почему вы называете список кредитов «кредит» и единый кредит «займы».Это должно быть наоборот: 's' для множественной формы, no' s' для сингулярной формы. –

+0

Да, сделал небольшую ошибку .. я понял, что это было неправильно, но еще не изменил его ... Но спасибо, что указали его снова :) – Emperial

ответ

1

Я предполагаю, что StudentLoan имеет поле public int loanAmount, то вы можете сделать это:

for(StudentLoan loan : loans) { 
     int index=0; 
     if (loans.loanAmount > 0) { 
      System.out.print(index + " : "); 
      loan.printDetails(); 
      index++; 
     } 
    } 

Этот путь только кредиты с loanAmount > 0 ПРОХОДЯТ распечатаны.

Если поле loanAmount будет private можно просто реализовать метод получения для поля и изменить условие:

if (loan.getloanAmount() > 0) { 

EDIT

Отвечая на Ваш вопрос от комментариев:

Чтобы удалить все займы с loamAmount из 0, мы просто добавим еще if к каждому циклу:

for(StudentLoan loan : loans) { 
     int index=0; 

     // print loans with amount > 0 

     if (loan.loanAmount > 0) { 
      System.out.print(index + " : "); 
      loan.printDetails(); 
      index++; 
     } 

     // delete loans with amount = 0 

     if (loan.loanAmount == 0) { 
      loans.remove(loan) // UNSAFE! see edit below 
      } 
    } 

EDIT

Использование .remove во время прохода по коллекции небезопасно. Это должно быть сделано с iterator как так:

import java.util.Iterator // add to imports 

Iterator<StudentLoan> i = loans.iterator(); 

while (i.hasNext()) { 
    StudentLoan loan = i.next(); 
    if (loan.getAmount() == 0) { 
     i.remove(); 
    } 
} 
+0

Спасибо большое! Это сработало отлично! :) Вы бы тоже знали, как удалить все займы, в которых есть 0? – Emperial

+0

Конечно, я отредактирую свой ответ выше. – Octoshape

+0

Он говорит, что не смог найти переменную loanAmount .. Я также редактировал мой код, чтобы исправить ошибку s – Emperial

1

Я предполагаю, что у вас есть поглотитель для переменной суммы в объектах StudentLoan, т.е. getAmount(). Если нет, вы должны создать его.

Метод печати изменится на:

public void printLoanDitails() 
{ 
    System.out.println("Loan Summery: "); 
    int index=0; //This should be outside the loop, or it will be set to 0 each time 
    for(StudentLoan loans : loan) { 

     if(loans.getAmount() > 0) 
     { 
      System.out.print(index + " : "); 
      loans.printDetails(); 
      index++; 
     } 
    } 
    System.out.println(); 
} 

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

0

не совсем уверен, что вы делаете с вашим утверждением печати, не видя ваш класс studnetLoan

У вас есть:

for(StudentLoan loans : loan) { 
     int index=0; 
     System.out.print(index + " : "); 
     loans.printDetails(); 
     index++; 
    } 

Я бы сделать что-то больше, как это:

for(StudentLoan loan : loanList) {   
     if(loan.getAmount() > 0) 
      loan.printDetails(); 

    } 

Примечание что я назвал список кредитов «loanList», или это могут быть «кредиты», но нет смысла называть это «займом»

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