我试图创建一个方法,为文件中的每个字符添加一个变量。如果文件是:
abcd
abc
ab
然后在函数运行变量之后,它将返回等于9。
这是我到目前为止的代码:
public static double getRow(String filename) {
double size = 0;
File f;
Scanner infile;
try{
f = new File(filename);
infile = new Scanner(f);
}
catch (IOException e){
System.out.println("Error opening the file");
//System.exit(0); not good
}
while(infile.hasNext()) {
size++;
}
infile.close();
return size;
}
但我一直认为infile
尚未初始化。我不确定如何获得我想要的解决方案。
答案 0 :(得分:1)
由于您要在infile
块中初始化try
,如果try
中出现任何问题,{I} infile
将在您尝试使用之后永远不会被初始化catch
阻止。
您要做的是让您在try
区块中处理所有内容,包括循环播放和关闭infile
:
public static double getRow(String filename) {
double size = 0;
File f;
Scanner infile;
try {
f = new File(filename);
infile = new Scanner(f);
while(infile.hasNext()) {
size++;
}
infile.close();
}
catch (IOException e) {
System.out.println("Error opening the file");
//System.exit(0); not good
}
return size;
}
答案 1 :(得分:0)
我刚试过这个;错误是“变量infile可能尚未初始化”,这是因为如果行new File
中存在异常,则不会出现异常。
有几种解决方案,但最好的方法是确保在不保证已初始化时不要尝试使用infile
,例如将代码置于{{1}内如上所述阻止。
这是我的版本:
try
理想情况下,您还要将import java.util.*;
import java.io.*;
class Foo {
public static double getRow(String filename) {
double size = 0;
File f;
Scanner infile ;
try{
f = new File(filename);
infile = new Scanner(f);
while(infile.hasNext()) {
size++;
}
infile.close();
return size;
}
catch (IOException e){
System.out.println("Error opening the file");
//System.exit(0); not good
}
return -1;
}
public static void main(String[] argv){
System.out.printf("ResultsL %d\n",
getRow("foo.txt"));
return ;
}
}
设为public static int
,因为您正在计算某些内容,这是一个离散值,而不是真实值。