2016-12-22 18 views
0

Product.javaというJavaファイルが作成されました。 Items.txtというテキストファイルも作成しました。基本的に、ユーザーがSequential Searchを使用して単語を入力すると、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) 

試してみてください。

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

同じ以下の比較に適用されます。

0

ことは、これを変更してみてください。これに

 line = reader.readLine(); 

     while(reader != null) 
     { 

..

 line = reader.readLine(); 

     while(line != null) 
     { 

あなたはそれが常にされる、リーダー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(); 

      } 
     } 

それは読者がnullでなく、それはなることはありませんしながら、ループを続けています。あなたは多分、より良いあなたの問題に合った何か他のものをチェックしようとする場合があります:

  • (!line.equals( "3"))しながら
  • (!line.equals( "X"))ものの
  • ながら依然として 'X'、 '3' または単に何も存在しない場合であっても(ライン!= NULL)そうでなければ

、(リーダー!= NULL)、したがって、ループが無限大です。あなたはこれらの関数を定義する必要が

+0

は、これは本当に文字列を比較する方法ですか? –

+1

いいえ、そうではありません。修正していただきありがとうございます。投票したのではなく、編集した方がいいと思っていました。そのような評判を持っていても、あなたの好きではないものを投票する権利はありません。これが編集オプションの目的です。私はちょうど助けようとしていました。次回はもっと慎重になるでしょうが、これは心配していません。 – RoaaGharra

+0

私はあなたの母親ではありません - あなたの後に整理するのは私のためではありません。それが動作する方法は簡単です、間違った答えをして、私はあなたをdownvoteし、それを修正し、私は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')); ' –

関連する問題