2016-12-22 4 views
0

Я создал Java-файл под названием Product.java. Я также создал текстовый файл Items.txt. В основном, когда пользователь вводит слово с помощью последовательного поиска для поиска данных, которые они ищут из Items.txt. Моя основная проблема - когда я вхожу в 3, чтобы отобразить все записи или ввести x, чтобы выйти из программы, она продолжает цикл. Но я не могу решить эту проблему. Может ли кто-нибудь решить это для меня?Нажмите любую клавишу с BufferedReader

Items.txt

1000|Cream of Wheat|Normal Size|Breakfast|NTUC|5|3.00 
1001|Ayam Brand|Small Size|Canned|NTUC|4|4.00 

Product.java

import java.io.*; 
import java.util.*; 

public class Product { 


    public static void main(String[] args) { 

     ArrayList<Item> prdct = new ArrayList<Item>(); 
     String inFile = "items.txt"; 
     String line = ""; 
     FileReader fr = null; 
     BufferedReader br = null; 
     StringTokenizer tokenizer; 

     int quantity; 
     String id, brandname, desc, category, supplier; 
     float price; 

     try{ 
      fr = new FileReader(inFile); 
      br = new BufferedReader(fr); 

      line = br.readLine(); 

      while(line!=null) 
      { 
       tokenizer = new StringTokenizer(line,"|"); 

       id = tokenizer.nextToken(); 
       brandname = tokenizer.nextToken(); 
       desc = tokenizer.nextToken(); 
       category = tokenizer.nextToken(); 
       supplier = tokenizer.nextToken(); 
       quantity = Integer.parseInt(tokenizer.nextToken()); 
       price = Float.parseFloat(tokenizer.nextToken()); 

       Item itm = new Item(id,brandname,desc,category,supplier,quantity,price); 
       prdct.add(itm); 

       line = br.readLine(); 
      } 
      br.close();  
     } 
     catch(FileNotFoundException e){ 
      System.out.println("The file " + inFile + " was not found."); 
     } 
     catch(IOException e){ 
      System.out.println("Reading error!"); 
     } 
     finally 
     { 
      if (fr!=null){ 
       try 
       { 
        fr.close(); 
       } 
       catch(IOException e) 
       { 
        System.out.println("Error closing file!"); 
       } 
      } 
     } 
     String INPUT_PROMPT = "\nPlease enter 3 to display all records, 4 to insert record, 5 to remove old records " + "or enter 'x' to quit."; 
     System.out.println(INPUT_PROMPT); 

     try 
     {   
      BufferedReader reader = new BufferedReader 
        (new InputStreamReader (System.in)); 
      line = reader.readLine(); 

      while(reader != null) 
      { 
       for(int i=0; i<prdct.size(); i++) 
       { 
        if(prdct.get(i).id.contains(line) || prdct.get(i).brandname.contains(line) || prdct.get(i).desc.contains(line) 
         || prdct.get(i).category.contains(line) || prdct.get(i).supplier.contains(line)) 
        { 
          System.out.println(prdct.get(i)); 
        } 
        System.out.println(INPUT_PROMPT); 
        line = reader.readLine(); 

       } 
      } 


      while("3".equals(line)) 
      { 
       for(int i=0; i<prdct.size(); i++) 
       { 
        System.out.println(prdct.get(i)); 
       } 
       System.out.println(INPUT_PROMPT); 
       line = reader.readLine(); 

      } 

      while(!line.equals("x")) 
      { 
        System.out.println(INPUT_PROMPT); 
        line=reader.readLine(); 
      } 
     } 
     catch(Exception e){ 
      System.out.println("Input Error!"); 
     } 
    } 

} 

ответ

0

Я подозреваю, что символ новой строки, что вызывает сравнение на провал.

Вместо проверки, если:

"3".equals(line) 

Try:

"3".equals(line.trim()) 

То же самое относится и к следующему сравнению.

0

Попробуйте изменить это ..

 line = reader.readLine(); 

     while(reader != null) 
     { 

к этому ..

 line = reader.readLine(); 

     while(line != null) 
     { 

Вы зацикливание на читателя быть не нулевым, что она всегда будет.

1

Проблема с этим контуром:

 while(reader != null) 
     { 
      for(int i=0; i<prdct.size(); i++) 
      { 
       if(prdct.get(i).id.contains(line) || prdct.get(i).brandname.contains(line) || prdct.get(i).desc.contains(line) 
        || prdct.get(i).category.contains(line) || prdct.get(i).supplier.contains(line)) 
       { 
         System.out.println(prdct.get(i)); 
       } 
       System.out.println(INPUT_PROMPT); 
       line = reader.readLine(); 

      } 
     } 

Он продолжает цикл, пока читатель не является нулевым, и это никогда не будет. Вы можете попытаться проверить что-то другое, что подходит вашей проблемы лучше, может быть:

  • While
  • While (line.equals ("х")!)
  • (line.equals ("3")!)
  • While (линия! = NULL)

в противном случае, даже если не является 'х', '3', или просто ничего, до сих пор (читатель! = NULL) и, следовательно, цикл бесконечен.

+0

Является ли это действительно способ сравнения строк? –

+1

Нет, это не так. Спасибо за исправление. Я бы предпочел, чтобы вы только что отредактировали его, вместо того, чтобы меня опротестовать. Наличие такой репутации не дает вам права проголосовать за все, что вам не нравится. Это вариант редактирования. Я просто пытался помочь, и в следующий раз я буду более осторожен, но это невостребовано. – RoaaGharra

+0

Я не твоя мать - это не для меня, чтобы привести в порядок после тебя. То, как это работает, просто, сделайте неправильный ответ, и я сниму вас, исправьте, и я удалю downvote.Я мог бы просто молча поддержать вас и не сказал вам, какова была ваша ошибка - вы предпочли бы это? –

0

вы должны определить эти функции:

public void showAllRecords() { 
    // show all record here 
} 
public void insertRecord() { 
    // insert record here 
} 
public void removeRecord() { 
    // insert record here 
} 
public void exit() { 
    // insert record here 
} 

затем

do{ 
    System.out.println(INPUT_PROMPT); 
    switch(line) 
    { 
     case "3": 
      showAllRecords(); 
      break; 
     case "4": 
      insertRecord(); 
      break; 
     case "5": 
     removeRecord(); 
    } 
}while(!line.equals('x')); 
+0

считать 'String line =" x "; \t \t System.out.println (line.equals ('x')); ' –

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