Большую часть времени в классе не может быть двух переменных с одинаковыми именами, особенно если область их действия такая же, как и здесь, и в том и другом методе. Даже если бы тип объекта был другим, у компилятора не было бы возможности различить и выбрать тот, который вы хотите использовать, чтобы он не компилировался.
В приведенном вами коде мы видим, что вы использовали объявленные 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")) {
}
}
}
Чтобы вообще исправить эту ошибку, вы можете просто переименовать одну из переменных, но в вашем случае я не думаю, что наличие двух объектов 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")) {
}
}
}
}