【问题标题】:Java: Read integers from an existing text file and output to another fileJava:从现有文本文件中读取整数并输出到另一个文件
【发布时间】:2011-03-04 23:33:29
【问题描述】:

条形图

编写一个 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);

    }
}

【问题讨论】:

  • 我建议编辑您的问题以包含编译错误。

标签: java


【解决方案1】:

嗯,你有 2 个名为 inputFile 的变量:

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

尝试将第一个重命名为 inputScanner。 outputFile 的处理方式相同。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我会考虑这样的方法

      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()

      【讨论】:

        【解决方案4】:

        提示:

        1. 在同一范围内不能有两个同名的局部变量。尤其看你inputFile的声明。

        2. 您需要查看ScannerFile 类的用途。阅读 javadocs,并查看它们声明的方法和构造函数。

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

        4. 创建Scanner 对象实际上并没有读取任何内容。您必须调用对象上的方法才能使其执行某些操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-27
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-08
          相关资源
          最近更新 更多