Несколько советов:
- Соблюдать правильные отступы кода
- Если вы используете IDE, например Eclipse, он может автоматически исправить отступ для вас
- Развить инстинкт отладки
- Попробуйте получить текущий рабочий каталог и перечислите все файлы в нем
- Рефакторинг повторяющегося кода
- Написание парных операторов, как вы сделали, должно немедленно поднять красные флажки
- Effective Java 2nd Edition
- Элемент 23: Не используйте необработанные типы в новом коде
- Элемент 52: Ссылаться на объекты по их интерфейсам
- Элемент 46: Предпочитайте циклы «для каждого» традиционным
for
циклам
- Использовать разумные имена переменных
Что касается 2, попробуйте что-то вроде этого:
public static void listDir() {
File current = new File(".");
System.out.println(current.getAbsolutePath());
for (String filename : current.list()) {
System.out.println(filename);
}
}
Затем в вашем main
просто позвоните listDir
, прежде чем все остальное, и посмотрите, запускаете ли вы приложение из правильного каталога и есть ли в каталоге "anagrams.in"
. Обратите внимание, что некоторые платформы чувствительны к регистру.
Что касается 3 и 4, рассмотрите возможность использования вспомогательного метода, подобного этому:
static Set<Character> usedCharactersIn(String s) {
Set<Character> set = new HashSet<Character>();
for (char ch : s.toLowerCase().toCharArray()) {
set.add(ch);
}
return set;
}
Обратите внимание, как вместо Map<K,V>
используется Set<E>
. Глядя на остальную часть кода, вам, похоже, на самом деле не нужно отображение, а скорее какой-то набор (но об этом позже).
Затем вы можете получить что-то подобное в main
, что делает логику очень читабельной:
String s1 = ...;
String s2 = ...;
boolean isNotQuiteAnagram = (s1.length() == s2.length()) &&
usedCharactersIn(s1).containsAll(usedCharactersIn(s2));
Обратите внимание, как переменные теперь называются довольно разумно, выделяя их роли. Также обратите внимание, что эта логика не совсем определяет, что s1
является анаграммой s2
(рассмотрим, например, "abb"
и "aab"
), но это фактически то, что вы делали.
Так как это выглядит как домашнее задание, я предоставлю вам возможность выяснить, когда две строки являются анаграммами.
Смотри также
Смежные вопросы