import java.io.*;
import java.util.*;
public class FrequencyCount
{
public static void main(String...args) throws IOException
{
int count0=0;
int count1=0;
int x=0;
//System.out.println(new File(".").getCanonicalPath());
Scanner scan=new Scanner(new File("F:\DUCAT COCHNG\java progs\IO\str.txt.txt"));
while(scan.hasNext())
{
x=scan.nextInt();
if(x==0)
count0++;
else if(x==1)
count1++;
}
System.out.println("Frequency of 0's is: "+count0);
System.out.println("Frequency of 1's is: "+count1);
}
}
显示的输出为:
F:\DUCAT COCHNG\java progs\IO>java FrequencyCount Exception in thread "main" java.util.InputMismatchException: 对于输入字符串: " 00000111010010011001010010100101010001000101110111110101010011101001001010010010 1" at java.util.Scanner.nextInt(Scanner.java:2165) at java.util.Scanner.nextInt(Scanner.java:2118) at FrequencyCount.main(FrequencyCount.java:15)
F:\DUCAT COCHNG\java progs\IO
>
str.txt 文件是:
000001110100100110010100101001010100010001011101111101010100111010010010100100101
我认为这可能会有所帮助:
try{
Scanner scan = new Scanner(new File(filename));
while (scan.hasNext())
{
String str = scan.next();
char[] myChar = str.toCharArray();
for(char c: myChar){
x=Character.getNumericValue(c);
if(x==0)
count0++;
else if(x==1)
count1++;
}
}
System.out.println("Frequency of 0's is: "+count0);
System.out.println("Frequency of 1's is: "+count1);
}
catch(Exception e)
{ e.printStackTrace();}
你想用scan.hasNextInt()
而不是scan.hasNext()
。 后者检查是否有任何令牌,我怀疑您在扫描程序正在解析的文件末尾有一行新行。 这显然不能转换为整数,因此抛出异常。
您可能还想关闭scanner
。 只需使用scan.close()
. 在这样一个小程序中,这里不是绝对必要的,但很好的做法。