2016-05-01 17 views
0

このコードの約90%は終了しましたが、最後の部分にはまっています。ですから、私は、MainClassからOrdersProcessedクラスへpartNumber、quantity、およびtoalCostを格納して、出力ファイルを作成したいと思っています。それをどうやって行うのですか?そのチュートリアルは自分のコードで投稿したのですか?出力ファイルをJavaで作成する

MainClass:

import java.util.Scanner; 

public class MainClass 
{ 

    private static final String DATA_FILE = "masterInventory.dat"; 
    private static Scanner input = new Scanner(System.in); 

    public static void main(String[] args) 
    { 
     InventoryData myData; 
     double price = 0.0; 
     int quantity = 0; 
     double totalCost = 0.0; 
     int index = 0; 
     int partNumber = 0; 
     char runProgram; 
     int totalFound; 
     int partFound = 0; 
     int partnotFound = 0; 

     myData = new InventoryData(DATA_FILE); 
     myData.loadArrays(); 
     myData.bubbleSort(); 

     System.out.println("Do you want to continue? prss 'Y' for yes or 'Q' to quit"); 
       runProgram = input.nextLine().charAt(0); 
       runProgram = Character.toUpperCase(runProgram); 


       while (runProgram == 'Y' || runProgram == 'Q') 
       { 

        if(runProgram == 'Y') 
        { 

         System.out.print("Please enter your part number: "); 
         partNumber = input.nextInt(); 

         // TODO start your loop here 

         index = myData.binSearch(partNumber); 

         if(index != -1) 
         { 
          price = myData.getPrice(index); 
          System.out.printf("The price is %.2f%n", price); 
          System.out.print("How many would you like?"); 
          quantity = input.nextInt(); 
          totalCost = price * quantity; 
          partFound++; 

          // TODO do printing, writing to file here 
         } 
         else 
         { 
          System.out.println("Part not found"); 
          partnotFound++; 
         } 

         System.out.println("Part# "); 
         System.out.print(partNumber); 
         System.out.println(); 

         System.out.println("Price $"); 
         System.out.print(price); 
         System.out.println(); 

         System.out.println("Quantity "); 
         System.out.print(quantity); 
         System.out.println(); 

         System.out.println("totalPrice "); 
         System.out.print(totalCost); 
         System.out.println(); 

         System.out.println("Do you want to continue? prss 'Y' for yes or 'Q' to quit"); 
         runProgram = input.next().charAt(0); 
         runProgram = Character.toUpperCase(runProgram); 

        } 
        if (runProgram == 'Q') 
        { 
         totalFound = partFound + partnotFound; 

         System.out.println("Total parts found : " + partFound); 
         System.out.println("Total parts not found : " + partnotFound); 
         System.out.println("Total parts searched : " + totalFound); 

         break; 
        }// end if 'Q' 
       }// end while 
    } 
} 

OrderProcessedクラス:

public class OrdersProcessed 
{ 





    public OrdersProcessed(String File) 
    { 
     File = "ordersProcessed.dat"; 
    } 


    public void saveOneRecord() 
    { 

    } 

次に、ここで私が見つけたチュートリアルです:

public static void main(String[] args) 
{ 
    String lastName, firstName; 
    double salary; 

    try 
    { 
     //Instantiate a PrintWriter to append to an existing file 
     PrintWriter myPW = new PrintWriter (new FileWriter("employeeOut.dat", true)); 
     Scanner myScanner = new Scanner (System.in); 

     //Input first value for lastName, which will be the LCV 
     System.out.println("Input the employee's last name (or Q to quit): "); 
     lastName = myScanner.nextLine(); 

     while (!(lastName.equals("Q") || lastName.equals("q"))) 
     { 
      System.out.println("Input the employee's first name: "); 
      firstName = myScanner.nextLine(); 
      System.out.println("Input the employee's salary: "); 
      salary = myScanner.nextDouble(); 
      myScanner.nextLine(); //Eliminate carriage return left in stream after numeric input 

      //Save one record 
myPW.printf ("%s %s %.2f\n", lastName, firstName, salary); 

      //Input next last name 
      System.out.println("Input the employee's last name (or Q to quit): "); 
      lastName = myScanner.nextLine(); 
     }//END while 

     myPW.close(); 
     myScanner.close(); 

    }//END try 
    catch (IOException ex) 
    { 
     ex.printStackTrace(); 
    } 
}//END main method 
+0

OrdersProcessedクラスをシリアル化しますか?下記の私の更新された答えを確認してください。 – Gustavo

答えて

0

[OK]を、最初に私は、あなたが製品型番の保存したいと思いましたファイル内のquantityとtotalCostは以下のコードで行います:

PrintWriter writer = new PrintWriter("file_name.txt", "UTF-8"); 
writer.println(partNumber); 
writer.println(quantity); 
writer.println(toalCost); 
writer.close(); 

しかし、PartNumber、quantity、およびtotalCostをOrdersProcessedクラスに格納してファイルに保存するように見えます。

だから、まずあなたのOrdersProcessedクラスがSerializableを実装します:

:あなたのsaveOneRecordメソッドに以下を追加します

int quantity = 0; 
int partNumber = 0; 
double totalCost = 0.0; 

public class OrdersProcessed implements Serializable { 

は、setterメソッドでOrdersProcessedクラスのインスタンス変数を追加します。

try 
    { 
    FileOutputStream fileOut = new FileOutputStream("ordersProcessed.dat"); 
    ObjectOutputStream out = new ObjectOutputStream(fileOut); 
    out.writeObject(e); 
    out.close(); 
    fileOut.close(); 
    } catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

次に、以下のように「// TODO do priここにファイルに書き込む」:

シリアライズの詳細here

+0

これは彼が望む形式またはファイル形式ではありません。 – sbowde4

+0

彼は望むフォーマットを指定していませんでした。あなたが望むと思うフォーマット ""%s%s%.2f \ n ""は – Gustavo

+2

のチュートリアルから来たものです – ppperry

0

あなたが提供したチュートリアルは、実際にファイルに書き込む簡単な方法を示しています。

あなたが見ることができるように、あなたはPrintWriterオブジェクト(ファイルが存在することを確認すること)を作成する必要があります:

PrintWriter myPW = new PrintWriter (new FileWriter("employeeOut.dat", true)); 

次にあなたが同じ行に複数の値を印刷するのprintfを使用することができます。

myPW.printf ("%s %s %.2f\n", lastName, firstName, salary); 

プリントライターと必要な値にアクセスできる限り、任意の場所で使用できます。上記の3つの値はlastName、firstName、salaryです。最初の引数"%s %s %.2f\n"%s%.2fビットの代わりにこれらの値が追加されます。は値を文字列として配置することを意味し、%.2fはfloat小数位。必要な数だけ追加することができます。このに関する更なる情報については、Javaのドキュメントを参照してください:https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#printf(java.lang.String,%20java.lang.Object...)

最後に、あなたはPrintWriterオブジェクトをクローズする必要があります:

myPW.close(); 

おそらく探しのtry/catch文でこれらの操作を囲む必要がありますしかし、IOExceptionのために。

+0

それは私です私が混乱しているのは、私のsaveOnRecordが私のordersProcessedクラスにそれらを格納すると仮定しているからです。それはどうですか?ファイルを閉じているので、私は単にsaveOneRecordメソッドを仮定しているので、値? –

+0

あなたが正しく理解していれば、実行時にOrdersProcessedクラスにデータを保存したいのですか?その場合、ArrayListのようなListにデータを格納することをお勧めします。リストにデータを格納するたびにオブジェクトの新しいインスタンスを使用する必要がある場合は、リストをループして上のようにデータをファイルに書き込むことができます。 –

0

あなたのやり方には問題はありませんが、コードを少しきれいにする方法があります。あなたはエラーがあるとは言わなかったので、正しく動作すると仮定しています。

コードから不要なものを削除してテストしました。それはすべて動作します

public static void main(String[] args) 
    { 
    String lastName = new String(), firstName;//Initialized lastName to prevent an error 
    double salary; 

    try 
    { 
     //Instantiate a PrintWriter to append to an existing file 
     PrintWriter myPW = new PrintWriter (new FileWriter("employeeOut.dat", true)); 
     Scanner myScanner = new Scanner (System.in); 

     //put all inputs inside the loop 

     while (!(lastName.equals("Q") || lastName.equals("q"))) 
     { 
      System.out.println("Input the employee's last name (or Q to quit): "); 
      lastName = myScanner.nextLine(); 
      System.out.println("Input the employee's first name: "); 
      firstName = myScanner.nextLine(); 
      System.out.println("Input the employee's salary: "); 
      salary = myScanner.nextDouble(); 
      myScanner.nextLine(); //Eliminate carriage return left in stream after numeric input 

      //Save one record 
      myPW.printf ("%s %s %.2f\n", lastName, firstName, salary); 

      //loops back to last name now 

     }//END while 

     myPW.close(); 
     myScanner.close(); 

    }//END try 
    catch (IOException ex) 
    { 
     System.out.print(ex); 
    } 
}//END main method 

} 
関連する問題