在用Java传递Scanner对象并使用while循环访问每一行时,错误提示我有重复的局部变量(第一行中是“ fileContents”)。
static Map<String, Integer> countCategories(Scanner fileContents) {
HashMap<String, Integer> categoryCount = new HashMap<String, Integer>();
while (fileContents.hasNext()) {
String line = fileContents.nextLine();
String[] lineItems = line.split(",");
String category = lineItems[2]; // specified position in CSV file
if (categoryCount.get(category) == null) {
categoryCount.put(category, 1);
} else {
categoryCount.put(category, categoryCount.get(category) + 1);
}
}
为了进一步说明这一点,我只是从文件中组织信息,而我是Java的新手。我什至没有正确执行此HashMap,还是应该以完全不同的方式格式化此方法和/或在内部创建的哈希图?
根据要求,剩下的主要内容:
public class PA2Main {
public static void main(String[] args) {
try {
String fileName = args[0];
Scanner fileContents = new Scanner(new File(fileName)); // temp var
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// recreate fileContents to use outside of try/catch
String fileName = args[0];
Scanner fileContents = new Scanner(new File(fileName));
HashMap<String, Integer> organizedCategories = countCategories(fileContents); // call function
if (args.length > 1) {
if (!"LOCATION".equals(args[1]) || !"CATCOUNT".equals(args[1])) {
System.out.println("Invalid Command");
} else {
//process commands
if (args[1].equals("CATCOUNT")) {
}
if (args[1].equals("LOCATION")) {
// organize info in fi
}
}
}
}
格式化有点奇怪,但是我希望这是有道理的。显然,我对该程序的其余部分没有做很多事情,而且也不是很干净。错误消息仅指出:重复的本地变量fileContents
“快速修复”正在重命名。
答案 0 :(得分:0)
在大多数情况下,您不能在一个类中拥有两个具有相同名称的变量,尤其是当它们的作用域相同时(如此处使用相同的方法)。即使对象的类型不同,编译器也无法区分和选择您要使用的对象,因此它将无法编译。
在您提供的代码中,我们可以看到您使用了具有相同名称的声明的2个Scanner对象,每次尝试此操作都会导致错误。
public static void main(String[] args) {
try {
String fileName = args[0];
*** Scanner fileContents = new Scanner(new File(fileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String fileName = args[0];
*** Scanner fileContents = new Scanner(new File(fileName));
HashMap<String, Integer> organizedCategories = countCategories(fileContents);
if (args.length > 1) {
if (!"LOCATION".equals(args[1]) || !"CATCOUNT".equals(args[1])) {
System.out.println("Invalid Command");
} else {
if (args[1].equals("CATCOUNT")) {
}
if (args[1].equals("LOCATION")) {
}
}
}
一般来说,要解决此错误,您可以重命名其中一个变量,但就您而言,我认为甚至没有必要拥有2个Scanner对象。
try-catch子句应专门用于代码中可能引发异常的行,在这种情况下,初始化扫描器。
考虑到这一点,更干净的编写代码的方法是
public static void main (String[] args) {
String fileName = args[0];
Scanner fileContents;
try {
fileContents = new Scanner(new File(fileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
HashMap<String, Integer> organizedCategories = countCategories(fileContents);
if (args.length > 1) {
if (!"LOCATION".equals(args[1]) || !"CATCOUNT".equals(args[1])) {
System.out.println("Invalid Command");
} else {
if (args[1].equals("CATCOUNT")) {
}
if (args[1].equals("LOCATION")) {
}
}
}
}