-2

我正在尝试编写一个 Java 程序来读取文本文件中的输入并将 1 与 0 进行比较。当 1 的频率等于 0 的频率时,结果相等。

例子:

输入.txt

1100
100
101
10

输出.txt

平等的!
不相等!
不相等!
平等的

这是我正在使用的代码:

package automata;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class Main {


public static void main(String[] args) throws FileNotFoundException, IOException {
     FileReader freader = new FileReader("Input.txt");
    BufferedReader br = new BufferedReader(freader);
     try
{

    String s="";
    while((s = br.readLine()) != null)
    {
        int count = 0;
        for(int i = 0 ; i < s.length() ; i++)
        {
            if(s.charAt(i) == '0') count++;
            else if(s.charAt(i) == '1') count--;
        }
        if(count == 0) System.out.print("Equal!\n");
        else System.out.print("Not Equal! \n");
    }

} catch (FileNotFoundException e){
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
            }
}
4

2 回答 2

2

我就是这样做的。

import java.io.*;

public class TestFile
{
    public TestFile()
    {
        File inputFile = new File("input.txt"),
             outputFile = new File("output.txt");

        try
        {
            FileInputStream fis = new FileInputStream(inputFile);
            FileOutputStream fos = new FileOutputStream(outputFile);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
            String s;
            while((s = br.readLine()) != null)
            {
                int count = 0;
                for(int i = 0 ; i < s.length() ; i++)
                {
                    if(s.charAt(i) == '0') count++;
                    else if(s.charAt(i) == '1') count--;
                }
                if(count == 0) bw.append("Equal!\n");
                else bw.append("Not Equal! \n");
            }
            br.close();
            bw.close();
        } catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        new TestFile();
    }
}
于 2013-03-10T13:56:39.113 回答
1

如果您遍历每一行的每个字符,

  • 您可以计算一个或零并将结果与​​完整字符串的一半长度进行比较。

  • 您可以使用一个初始化为零的计数器,并为每个 1 增加一个,为每个 0 减少一个,因此您将在相同数量的 1 和 0 上将其设为 0

此外,如果您获得大量数据(很多行和很长的行),那么在到达终点之前定期检查一行是否相等可能是有意义的(如果您在 2000 个字符的行上有 1001 个,您无需再检查并保存 999 次迭代)。

于 2013-03-10T13:19:11.510 回答