2014-12-06 5 views
1

Я новичок в java и мне нужна помощь по моим методам.java - запись массива в выходной файл

, так что мне нужно создать flagOverdueOwners (CarOwner [] inArray) метод, который генерирует и возвращает массив для транспортных средств, чья регистрация истекло. Это определяется как регистрации, которые более 12 месяцев на основе текущей REG_MONTH, который 4 и REG_YEAR, который 2014

это мой метод flagOverdueOwners в классе RegistrationMethods:

public class RegistrationMethods implements Serializable{ 

final int REG_MONTH = 4; 
final int REG_YEAR = 2014; 
public CarOwner[] flagOverdueOwners(CarOwner[] inArray) 
{ 


    // insert code to compare that are earlier than 4/2013 

    temp = inArray; 



    return temp;} 

} 

и это в моем главном метод:

public static void main (String [] args) 
{ 
PrintWriter outputStream = null; 

    outputStream = new PrintWriter (new FileOutputStream ("output.txt", true)); 
    CarOwner arr[] = dmv.flagOverdueOwners(ItStateCopy) 
    outputStream.println("\nOwners with Expired Registration"); 

    for (int i = 0 ; i < arr.length ; i++) 
    { 
     outputStream.println(arr[i]); 
    } 


    outputStream.close(); 
} 

мой output.txt должен conatin:

Владельцы с истекшим сроком регистрации

Тасманский дьявол ГТУ-789 10/2012

Сильвестер Кошка ЯКР-456 1/2013

Yosemite Sam FGH-123 3/2013

(и есть куча списков, которые после 4/2013)

ps.this мой CarOwner класс:

public class CarOwner extends Citizen implements CarOwnerInterface, Serializable, Comparable 
{ 
private String license; 
private int month, year; 

public CarOwner() 
{ 
    super(); 
    license = "Not Assigned"; 
    month = 0; 
    year = 0;   
} 

public CarOwner(String inFirst, String inLast, String inLicense, int inMonth, int inYear) 
{ 
    super(inFirst, inLast); 
    license = inLicense; 
    month = inMonth; 
    year = inYear; 
} 

public void setLicense(String inLicense) 
{ 
    license = inLicense; 
} 

public String getLicense() 
{ 
    return license; 
} 

public void setMonth(int inMonth) 
{ 
    month = inMonth; 
} 

public int getMonth() 
{ 
    return month; 
} 

public void setYear(int inYear) 
{ 
    year = inYear; 
} 

public int getYear() 
{ 
    return year; 
} 

public int compareTo(Object o) 
{ 
    if ((o != null) && (o instanceof CarOwner)) 
    { 
     CarOwner otherOwner = (CarOwner) o; 
     if (otherOwner.getYear() > getYear()) 
      return -1; 
     else if (otherOwner.getYear() < getYear()) 
      return 1; 
     else if (otherOwner.getMonth() > getMonth()) 
      return -1; 
     else if (otherOwner.getMonth() < getMonth()) 
      return 1; 
     else 
      return 0; 
    } 

    return -1; 
} 

public String toString() 
{ 
    String str; 

    str = getLastName() +" " + getFirstName() + "\t\t" + license + "\t\t" + month + "/" + year; 

    return str; 
} 
} 

любая идея о том, как я должен кодировать в COMPAR e, если дата предшествует 4/2013?

любая помощь или предложения были бы высоко оценены!

ответ

0

вы должны написать serilization и deserilization методы. метод сериализации будет преобразовывать все свойства в байты, а метод десерилизации будет использовать это для построения объекта.

но, есть намного более простой способ в java. вы уже реализовали интерфейс Serializable для своего CarOwner и используете ObjectOutputStream для записи его в файл и используете ObjectInputStream для его чтения из файла. поэтому

ObjectOutputStream outputStream = new ObjectOutputStream (new FileOutputStream ("output.txt", true)); 

    CarOwner arr[] dmv.flagOverdueOwners(ItStateCopy) 
    for (int i = 0 ; i < arr.length ; i++) 
    { 
     outputStream.writeObject(arr[i]); 
    } 
0

Что-то вроде «[LCarOwner; @ c9bf922» - это то, что вы получаете, когда вы печатаете массив объектов CarOwner.

В этой строке:

outputStream.println(dmv.flagOverdueOwners(ItStateCopy)); 

метод println будет вызывать toString на массив, который dmv.flagOverdueOwners(ItStateCopy) возвращается. По умолчанию метод массива toString создает нечто вроде «[LCarOwner; @ c9bf922».

Если вы хотите, чтобы быть отформатирован красиво, используйте Arrays.toString:

outputStream.println(Arrays.toString(dmv.flagOverdueOwners(ItStateCopy))); 
Смежные вопросы