2017-07-26 3 views
0

Je suis en train de lire un fichier et d'imprimer les informations d'une certaine façonComment imprimer une façon particulière en utilisant des boucles imbriquées avec impression écrivain

Ceci est ma méthode actuelle

public class PrintImpl { 

public void createReport(PropertyLogImpl propertyLogImpl, RealtorLogImpl realtorLogImpl, String fileName) { 
    System.out.println("Creating clean report.."); 
    System.out.println("Report is complete -- located in file: " + fileName); 

    try { 

     PrintWriter writer = new PrintWriter(fileName); 
     LinkedList<Property> propertyList = propertyLogImpl.getPropertyList(); 
     System.out.println("Realtor Log:"); 
     RealtorNode listTop = realtorLogImpl.getListTop(); 
     RealtorNode temp = listTop; 
     Iterator<Property> iter = propertyList.iterator(); 
     propertyLogImpl.setPropertyList(propertyList); 
     Property property = iter.next(); 

     while (temp != null) { 
      writer.println(temp.getRealtor().getLicenseNumber() + " " + temp.getRealtor().getLastName() + ", " + temp.getRealtor().getFirstName()); 

      if (temp.getRealtor().getLicenseNumber().compareTo(property.getLicenseNumber()) == 0) { 
       writer.println(" " + property.getMlsNumber() + " " 
         + property.getStreetAdress() + " " 
         + property.getBedrooms() 
         + "/" + property.getBathrooms() + "$ " 
         + property.getAskingPrice() + " " 
         + property.isSold()); 

       writer.println("  " + property.getCity() + ", " 
         + property.getState() + ", " + property.getZipCode()); 
       if (iter.hasNext()) { 
        property = iter.next(); 
       } 
      } 

     } 
     temp = temp.getNextNode(); 

     writer.close(); 

    } catch (FileNotFoundException ex) { 

     System.out.println("File was not found"); 
     System.out.println(); 
    } 
} 

}

Mais la chose est, il se coince dans une boucle infinie. Donc, ce qu'il est supposé faire est de faire correspondre un numéro de licence d'agent immobilier avec un numéro de licence de propriété. La propriété est une liste liée et l'agent immobilier est un noeud qui est comme une liste liée. Fondamentalement ce que j'essaye de faire est d'obtenir un noeud, et itérer à travers les propriétés et imprimer toutes les propriétés sous cela sur l'agent immobilier. Passez ensuite au nœud suivant et répétez. Mais aucune des boucles que j'ai essayées n'a fonctionné. S'il vous plaît aider!

C'est ce que le fichier est censé ressembler à

CD4524521 snart, paul 
     1254294   246 wart street  2/3.0 $ 456321.00 SOLD 
        somewhere, CO 54236 

      1683946  879 Main St   2/2.0 $ 646589.00 
       Somehwere, CO 45726 

Il ressemblerait à cela, juste le nom du courtier immobilier, puis continuer à ajouter des propriétés à l'agent immobilier, après il n'y a plus de propriétés de l'agent immobilier, passer à un nouvel agent immobilier et continuer à ajouter des propriétés pour celui-là. Merci

Répondre

0

temp = temp.getNextNode(); est en dehors de la boucle while. Donc, la valeur de temp n'est jamais modifiée. C'est pourquoi vous obtenez une boucle infinie, car votre condition est temp != null.

En outre, je vous recommande de penser à surcharger la méthode toString() de cette classe Property ou d'ajouter une autre méthode pour obtenir une représentation sous forme de chaîne bien formatée des propriétés. Votre code semble très encombré si vous commencez à énigmenter ces chaînes ensemble pour la sortie dans la boucle while.

@Override 
public String toString(){ 
    return prop1 + "\t" + prop2 
     + "whatever" + somefield; 
} 
0

en dehors de la variable temp beeing extérieur de la boucle (comme indiqué par @mumpitz), vous pouvez également utiliser

writer.printf("%s %d ...","string",1234) 

afin que vous ayez la mise en forme séparée des champs. StringBuilder rend également cela un peu plus confortable.

Si vous avez des choses plus complexes à mettre en forme dans un proche avenir, un coup d'oeil à MessageFormat: https://docs.oracle.com/javase/tutorial/i18n/format/messageFormat.html