2011-03-04 16 views
0

棒グラフJavaは:別のファイルに既存のテキストファイルと出力から整数を読む

sales.txtと呼ばれる既存のテキストファイルから5つの店舗のための今日の売上高(整数)を読み込み、Javaプログラムを書き、 storeReport.txtという新しいファイルに出力する

プログラムは、各店舗の売上を比較する棒グラフを表示する必要があります。アスタリスクの行を表示して棒グラフの各バーを作成します。各アスタリスクは100ドルの売上を表します。以下は

sales.txtから読み取られる整数です:

1000 
1200 
1800 
800 
1900 

出力ファイル(storeReport.txt)は次のようになります。

Store 1: ********** 
Store 2: ************ 
Store 3: ****************** 
Store 4: ******** 
Store 5: ******************* 

を覚えておいてください、私は第5章:Java入門の「ループとファイルの紹介」にしか入っていません。答えは非常に単純化でなければなりません。私のテキストではまだ次のようなことはしていないので、int []、bufferedWriter、fstream、.length、out.print .....などの使用を控えてください。

Scanner inputFile = new Scanner (file) 
File inputFile = new File (sales.text) 
PrintWriter outputFile = new PrintWriter (storeReport.txt) 

forループ、whileループ、および入れ子ループを使用できます。

以下はこれまでに書いたコードです。コンパイルエラーが発生しています。助けてください!!ありがとう!

import java.util.Scanner; 

import java.io.*; 

public class BarChart 
{ 
    public static void main(String[] args) throws IOException 

    { 

     int store1,store2,store3,store4,store5; 
     int bar1,bar2,bar3,bar4,bar5; 

     Scanner inputFile = new Scanner(System.in); 

     File inputFile = new File("sales.txt"); 


     File outputFile = new File("storeReport.txt"); 

     PrintWriter outputFile = new PrintWriter("storeReport.txt"); 


     outputFile.println("SALES BAR CHART\n");    

     bar1 = store1/100; 
     outputFile.println("store 1 : "); 
     for(int i = 1; i <= bar1; i++) 
      outputFile.println("*"); 

     bar2 = store2/100; 
     outputFile.println("\nStore 2 : "); 
     for(int i = 1; i <= bar2; i++) 
      outputFile.println("*"); 

     bar3 = store3/100; 
     outputFile.println("\nStore 3 : "); 
     for(int i = 1; i <= bar3; i++) 
      outputFile.println("*"); 

     bar4 = store4/100; 
     outputFile.println("\nStore 4 : "); 
     for(int i = 1; i <= bar4; i++) 
      outputFile.println("*"); 

     bar5 = store5/100; 
     outputFile.println("\nStore 5 : "); 
     for(int i = 1; i <= bar5; i++) 
      outputFile.println("*"); 

     inputFile.close(); 

     outputFile.close();  

     System.out.println("Data written to the storeReport.txt"); 
     System.exit(0); 

    } 
} 
+5

質問を編集して、コンパイルエラーを含めることをおすすめします。 – maerics

答えて

1

あなたのコードが正常にstoreReport.txtに所望の出力を生成することができるだろうと思われる - そうではないsales.txtから数字を、含まれていたなどstore2store1場合。あなたはファイルから変数に数値を読み込ませるようにJavaに指示していません。ファイルからデータが自動的に取り込まれることはありません。コンパイルエラーはおそらく初期化されていない変数を使用することに関連しています(つまり、データはまだ含まれていません)。ファイル入力をカバーする書籍の部分を読んで、ファイルから変数にデータをロードする方法を確認してください。

Scanner inputFile = new Scanner(System.in);   
File inputFile = new File("sales.txt"); 

がinputScannerへの最初の名前を変更してみてください:-)

3

さて、あなたはで、inputFileという名前の2つの変数を持っています。 outputFileと同じです。

0

ヒント:

  1. あなたは同じ名前で同じスコープ内の2つのローカル変数を持つことができません。特に、inputFileという宣言を見てください。

  2. ScannerおよびFileクラスの目的を確認する必要があります。 javadocを読んで、宣言したメソッドとコンストラクタを見てください。

  3. 現在のバージョンのコードbar1 = store1/100;は(他のエラーを修正した後に)store1が初期化されていないというコンパイルエラーが表示されます。ローカル変数は、使用する前に初期化する必要があります。

  4. Scannerオブジェクトを作成すると、実際には何も読み取られません。あなたは何かをさせるためにオブジェクト上のメソッドを呼び出さなければなりません。

1

私はあなたの入力のそれぞれのためにこれを効果的に利用することができ、この

static void printBar(int sales) { 
    int bar = sales/100; 
    for(int i = 0; i < bar; i++) outFile.print("*"); 
    outFile.println(""); // flush and finish line 
} 

などの方法を検討します。 outFile変数を静的クラス変数として設定するか、パラメータとしてprintBar()に渡す必要があります。

関連する問題