使用Java计算文本文件中的数字

时间:2013-10-07 22:51:05

标签: java arrays file

这一直困扰着我一段时间。我通常不倾向于求助并做我的研究,但我找不到答案。

如何编写读取文本文件的程序,并计算某个数字出现的次数? 我是Java的初学者,也是一般的编程人员。 这是我的代码。

此代码生成一个包含100个随机数的文本文件

import java.io.*;

public class Rolling 
{
    public static void main (String[] args) throws IOException
    {
        int randomNum;

        PrintWriter fileout = new PrintWriter (new FileWriter ("randumnums.txt"));

        for (int i= 0; i < 101; i++)
        {
            randomNum = (int) (Math.random() * 100);

            fileout.println (randomNum);
        }
        fileout.close();
    }
}

现在我遇到的麻烦是我需要读取文件并编写一个代码,说X号被滚动了3次。例如,数字4在文本文件中出现了5次,所以我需要它打印“数字4被滚动5次”。

import java.io.*;

public class Reading 
{
    public static void main (String[] args) throws IOException
    {
        BufferedReader readFile = new BufferedReader (new FileReader ("randumnums.txt"));
        int number = 0;
        int inMarks [] = new int [100]; 

        for (int i = 0; i < 100; i++)
        {
            inMarks [i] = Integer.parseInt(readFile.readLine());
        }   
    } 
}

2 个答案:

答案 0 :(得分:5)

你其实非常接近。很明显,你必须在某种列表中跟踪你的计数,并且数组在这里会做得很好。

首先,在实例化inMarks之后,将其中的每个值初始化为0:

int inMarks [] = new int [100]; 

for (int i = 0; i < 100; i++)
{
    inMarks [i] = 0;
}

然后将下面的循环更改为:

String nextLine = null;
while ((nextLine = readFile.readLine()) != null)
{
    int thisInt = Integer.parseInt(nextLine);
    inMarks[thisInt] = inMarks[thisInt] + 1;
}

inMarks现在可以完美地跟踪每个不同int在文件中滚动的次数。我将让你实现作业的打印输出部分,因为这样可以让你更好地理解这个解决方案是如何工作的。

答案 1 :(得分:1)

我觉得你正在寻找这样的东西(我没有测试过这段代码)

import java.io.*;

public class Reading {

    public static void main (String[] args) throws IOException {
        BufferedReader readFile = new BufferedReader (new FileReader("randumnums.txt"));
        int number = 0;
        int inMarks [] = new int [100]; 
        String readNumber = "";

        while ((readNumber = readFile.readline()) != null) {
            number = Integer.parseInt(readNumber);
            inMarks[number]++;
        }

    }
}

上面的代码基本上有一个100个整数的数组。然后我们开始读取文件,直到找不到任何东西。每次我们读取一行时,我们都会解析成一个整数(通常你应该绕过一个try ... catch)。然后,我们通过增加数组中的相应索引,将读取此数字的次数增加1。因此,如果您想知道数字'32'出现了多少次,您可以使用System.print.out(inMarks [32]);