2016-05-27 1 views
1

Face à des problèmes avec mes codes de laboratoire j'ai fait le tir mal à trouver que les deux il n'y a rien de mal avec mon FileReader/bufferedreaders, la méthode du véhicule et les valeurs LinkedListObtenir des valeurs de LinkedList en fonction des entrées utilisateur

Je suis J'ai trouvé des problèmes pour obtenir l'instruction if pour fonctionner Je ne sais pas Comment puis-je comparer les données de listes de liens actuelles extraites de mon fichier file.txt en utilisant tokenizer pour passer dans des champs donnés avec userinput en utilisant if/else?

Méthode principale

package test6; 


// import packages 
import java.util.LinkedList; 
import java.io.*; 
import java.util.Scanner; 
import java.util.StringTokenizer; 

public class Lab6 { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 

    // Declare variables for reading file 
    FileReader fr = null; 
    BufferedReader br = null; 
    String inFile = "Vehicle_Records.txt"; 
    final String INPUT_PROMPT = "\nPlease enter the search word " + "that you would like to obtain more information on:"; 
    String line; 
    StringTokenizer tokenizer; 

    // Declare variables to contain the record fields 

    String group; 
    String brand; 
    String model; 
    double rate; 

    // Declare and instantiate a new LinkedList 
    LinkedList<Vehicle> list = new LinkedList<Vehicle>(); 

    try { 
     // Instantiate FileReader & BufferedReader objects 
     fr = new FileReader(inFile); 
     br = new BufferedReader(fr); 

     //read a line from the file 
     line = br.readLine(); 

     // While line is not null 
     while (line != null) { 
      // Tokenize the records 
      tokenizer = new StringTokenizer(line, ","); 
      group = tokenizer.nextToken(); 
      brand = tokenizer.nextToken(); 
      model = tokenizer.nextToken(); 
      rate = Double.parseDouble(tokenizer.nextToken()); 
      // Create a new Vehicle object of the record 
      Vehicle newVehicle = new Vehicle(group, brand, model, rate); 
      System.out.println(newVehicle); 
      // Add this item object into the LinkedList 
      list.add(newVehicle); 
      // Read another line from file 
      line = br.readLine(); 

     } 
     // Close BufferedReader 
     br.close(); 
    } 
    catch (FileNotFoundException e) 
    { 
     System.out.println("The file" + inFile + "was not found"); 
    } 
    catch (IOException e) 
    { 
     System.out.println("Reading error!" + e); 
    } 
    finally 
    { 
     //Check if FileReader is opened 
     if (fr != null) { 
      try { 
       //close FileReader 
       fr.close(); 

      } catch (IOException e) { 
       System.out.println("Error closing file!"); 
      } 
     } 
    } 
     // Print out the input prompt 

     System.out.println(INPUT_PROMPT); 

    try 
    { 

     // Create readers to read from user input 
     //FileReader ufr = new FileReader(INPUT_PROMPT); 
     BufferedReader ubr = new BufferedReader(new InputStreamReader (System.in)); 

     // Read one line from user input 
     String uline=ubr.readLine(); 
     // Loop through all the records in the LinkedList 

     for(int i = 0; i< list.size(); i++) 
     { 
     // if the record is the same as the input from user 
     // (Hint: use contains() in String class to check whether 
     // search word is found in the records 
     String temp = new String(uline); 

     if(list.get(i)== uline.contains(temp)) 
     { 
      //print out the information of the vehicle that match user input 
      System.out.println(list.get(i)); 

     }   


     } 

    } 
    catch(IOException e) 
    { 
     System.out.println(e); 
    } 

    catch (Exception e) 
    { 
     System.out.println("Input error!" + e); 
    } 
    } 
}//main 

Vehical Classe

package lab6; 


public class Vehicle { 
    // Declare all the variables to contain the fields of a record 
    String group; 
    String brand; 
    String model; 
    double rate; 
// Creates a constructor to store all the fields into the variables 
    public Vehicle(String group, String brand, String model, double rate) 
    { 
     this.group=group; this.brand=brand; this.model=model; this.rate=rate; 
    } 
// Create a toString() method to return string in the same delimited 
// format as the input record 
    public String toString() 
    { 
     return(group+","+brand+","+model+","+rate); 
    } 
} 
+2

Bienvenue à SO. S'il vous plaît passez plus de temps à formater votre code - vous vous attendez à ce que les autres passent leur temps à vous aider; Vous devriez donc prendre le temps de le faire aussi facilement que possible. – GhostCat

+0

StringTokenizer est obsolète et ne doit pas être utilisé dans un nouveau code. –

+0

@David Conrad StringTokenizer n'est pas marqué comme obsolète. –

Répondre

1

Votre code n'est pas dans une méthode, de sorte que vous êtes face à un problème.

+0

Vous pourriez apprendre votre Java à partir d'ici: https://docs.oracle.com/javase/tutorial/java/javaOO/index.html –

+0

J'ai eu une méthode principale, je n'ai pas déclaré la méthode ici comme Je l'ai négligé x), en passant comme je l'ai dit, j'ai fait du dépannage, la seule raison pour laquelle mon code ne génère aucun résultat est parce que mon instruction if est fausse .. Je ne sais pas comment comparer l'entrée utilisateur à la variables stockées dans la liste liée – Kazu

0

Je suppose que vous regardez à travers les objets du véhicule en essayant de trouver une correspondance de l'une de ses quatre variables. Votre approche est incorrecte car vous comparez un objet avec une chaîne. A la place, vous pouvez utiliser une interface Comparable à l'intérieur de la classe Vehicle, où vous pouvez simplement comparer plusieurs chaînes.

Edit:

public class Vehicle implements Comparable<String>{ 

/* This method returns 0 if the search matches 
* Else it return a negative or a positive number*/ 
@Override 
public int compareTo(String o) { 
    int cmp = this.getBrand().compareToIgnoreCase(o); 
    if(cmp == 0) return cmp; 

    cmp = this.getGroup().compareToIgnoreCase(o); 
    if(cmp == 0) return cmp; 

    cmp = this.getModel().compareToIgnoreCase(o); 
    if(cmp == 0) return cmp; 
    /* Edited this part to work with doubles */ 
    try{ 
     cmp = (int)(this.getRate() - Double.parseDouble(o)); 
    } 
    catch(NumberFormatException e){ 
     return cmp; 
    } 

    return cmp; 

} 
} 

Et voici comment vous boucle à travers elle:

for(int i = 0; i< list.size(); i++){ 
      if(list.get(i).compareTo(uline) == 0) 
      { 
       System.out.println(list.get(i)); 

      } 
     } 

Je espère que ça aide.

PS. Je suis aussi nouveau à cette :)

+0

^Ouais je regarde à travers les variables stockées dans le LinkedList et oui comment puis-je faire cela? Désolé, je suis encore vraiment nouveau sur java – Kazu

0

AAAAAAAND Je fini par comprendre AVEC MON AUTRE AMI encore, j'aimerais remercier vous tous pour tendre la main pour me aider: ')

Je vais poster la solution à mon problème ici

//-etc- 
    // Create readers to read from user input 
    //FileReader ufr = new FileReader(INPUT_PROMPT); 
    BufferedReader ubr = new BufferedReader(new InputStreamReader (System.in)); 

    // Read one line from user input 
    String uline=ubr.readLine(); 
    // Loop through all the records in the LinkedList 


    for(int i = 0; i< list.size(); i++) 
    { 
    // if the record is the same as the input from user 
    // (Hint: use contains() in String class to check whether 
    // search word is found in the records 

    Vehicle vehicle = list.get(i); 

    if(vehicle.group.contains(uline) || 
     vehicle.brand.contains(uline) || 
     vehicle.model.contains(uline)) 
    { 
     //print out the information of the vehicle that match user input 
     System.out.println(list.get(i)); 

    }