Java:从现有文本文件中读取整数并输出到另一个文件

时间:2011-03-04 23:33:29

标签: java

BAR CHART

编写一个Java程序,从现有的名为sales.txt的文本文件中读取今天五个商店的销售数据(整数)并输出到名为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);

    }
}

4 个答案:

答案 0 :(得分:3)

好吧,你有两个名为inputFile的变量:

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

尝试将第一个重命名为inputScanner。 对于outputFile也是如此。

答案 1 :(得分:1)

如果 storeReport.txtstore1等已包含来自的数字,您的代码似乎能够成功生成所需的输出store2 - sales.txt,但他们没有。你没有告诉Java从文件和变量中读取数字;它们不会自动填充文件中的数据。您获得的编译错误可能与使用尚未初始化的变量有关(即,它们还不包含任何数据)。重新阅读本书中涉及文件输入的部分,以了解如何将文件中的数据加载到变量中。 : - )

答案 2 :(得分: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()

答案 3 :(得分:0)

提示:

  1. 您不能在同一作用域中使用相同名称的两个局部变量。请特别注意您对inputFile

  2. 的声明
  3. 您需要查看ScannerFile课程的目的。阅读javadocs,看看他们声明的方法和构造函数。

  4. 当前版本的代码中的语句bar1 = store1/100;(一旦您修复了其他错误)会给您一个编译错误,指出store1尚未初始化。必须在使用之前初始化局部变量。

  5. 创建Scanner对象实际上并没有读取任何内容。你必须在对象上调用方法才能使它做一些事情。