我正在尝试编写一个Java程序,它读取文本文件中的输入并将1s与0进行比较。当1s的频率等于0s的频率时,结果是相等的。
示例:
INPUT.TXT
1100
100个
101个
10
Output.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();
}
}
}
答案 0 :(得分: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();
}
}
答案 1 :(得分:1)
如果遍历每一行的每个字符,
你可以计算1或0,并将结果与整个字符串的长度的一半进行比较。
你可以使用一个初始化为零的计数器,并为每一个计数一个,每一个计数一个,所以你可以在相同数量的零和零上得到零
另外,如果你获得了大量的数据(很多行和非常长的行),那么在你到达它之前检查一条线是否相等是有意义的(如果你在2000年有1001条线) charater line,你不需要再检查并保存了999次迭代)。