Я сделал проект Java, который принимает строку чисел и выполняет некоторые движения в методах интерфейса для получения результата. Я протестировал это без реализации интерфейса, и он отлично работал и давал правильный результат. Вот файлы NumberRangeSummarizerImpl (пока нет взаимодействия с файлом интерфейса, работает отлично)
import java.util.*;
//import numberrangesummarizer;
public class NumberRangeSummarizerImpl {
public Collection<Integer> collect(String input)
{
// Split the input string into individual number strings and parse them into integers
String[] numberStrings = input.split(",");
List<Integer> numbers = new ArrayList<>();
for (String numberString : numberStrings) {
try {
int number = Integer.parseInt(numberString.trim());
numbers.add(number);
//numbers are added to an arraylist
} catch (NumberFormatException e) {
// Ignore any non-integer input values t7hfy6h6tg6 number int add the sorted list t
}
}
return numbers;
}
public String summarizeCollection(Collection<Integer> input) {
if (input == null || input.isEmpty()) {
return "Input invalid.";
}
// Sort the input numbers ASC
List<Integer> sortedNumbers = new ArrayList<>(input);
Collections.sort(sortedNumbers);
// compile output string
StringBuilder sb = new StringBuilder();
int startNumber = sortedNumbers.get(0);
int lastNumber = startNumber;
sb.append(startNumber);
for (int i = 1; i < sortedNumbers.size(); i++) {
int number = sortedNumbers.get(i);
if (number == lastNumber + 1) {
// The current number is sequential to the previous number
lastNumber = number;
} else {
// The current number is not sequential to the previous number
if (lastNumber > startNumber) {
// Output a range of numbers instead of just the lastNumber
sb.append("-").append(lastNumber);
}
sb.append(", ").append(number);
startNumber = number;
lastNumber = number;
}
}
// Handle the last range of numbers, if there was one
if (lastNumber > startNumber) {
sb.append("-").append(lastNumber);
}
return sb.toString();
}
}
App.java (где находится main)
import java.util.*;
public class App {
public static void main(String[] args) throws Exception {
NumberRangeSummarizerImpl summarizer = new NumberRangeSummarizerImpl();
//Collection<Integer> inputNumbers = summarizer.collect("1,3,6,7,8,12,13,14,15,21,22,23,24,31");
Collection<Integer> inputNumbers = summarizer.collect("1,1,3,6,7,8,12,13,14,15,21,22,23,24,25,26,27,31");
String outputString = summarizer.summarizeCollection(inputNumbers);
System.out.println(outputString);
}
}
Теперь я сделал java-файл интерфейса в той же папке (src)
package numberrangesummarizer;
import java.util.Collection;
public interface NumberRangeSummarizer {
//collect the input
Collection<Integer> collect(String input);
//get the summarized string
String summarizeCollection(Collection<Integer> input);
}
Теперь мне нужно использовать интерфейс, реализовав его в NumberRangeSummarizerImpl.
import java.util.*;
import numberrangesummarizer;
public class NumberRangeSummarizerImpl implements NumberRangeSummarizer {
public Collection<Integer> collect(String input)
{
// Split the input string into individual number strings and parse them into integers
String[] numberStrings = input.split(",");
List<Integer> numbers = new ArrayList<>();
for (String numberString : numberStrings) {
try {
int number = Integer.parseInt(numberString.trim());
numbers.add(number);
//numbers are added to an arraylist
} catch (NumberFormatException e) {
// Ignore any non-integer input values t7hfy6h6tg6 number int add the sorted list t
}
}
return numbers;
}
public String summarizeCollection(Collection<Integer> input) {
if (input == null || input.isEmpty()) {
return "Input invalid.";
}
// Sort the input numbers ASC
List<Integer> sortedNumbers = new ArrayList<>(input);
Collections.sort(sortedNumbers);
// compile output string
StringBuilder sb = new StringBuilder();
int startNumber = sortedNumbers.get(0);
int lastNumber = startNumber;
sb.append(startNumber);
for (int i = 1; i < sortedNumbers.size(); i++) {
int number = sortedNumbers.get(i);
if (number == lastNumber + 1) {
// The current number is sequential to the previous number
lastNumber = number;
} else {
// The current number is not sequential to the previous number
if (lastNumber > startNumber) {
// Output a range of numbers instead of just the lastNumber
sb.append("-").append(lastNumber);
}
sb.append(", ").append(number);
startNumber = number;
lastNumber = number;
}
}
// Handle the last range of numbers, if there was one
if (lastNumber > startNumber) {
sb.append("-").append(lastNumber);
}
return sb.toString();
}
}
Он вызывает пакет, интерфейс находится в той же папке, что и Impl, но выдает ошибку, когда не может разрешить NumberRangeSummarizer.
Я не понимаю, почему? Почему это не работает?




Я не думаю, что ваше утверждение import верно. Это неправильный синтаксис, это должно быть import package.Type или import package.*.
Кроме того, если предположить, что NumberRangeSummarizerImpl находится в том же пакете, что и тип интерфейса, вам вообще не нужно использовать оператор импорта.
Я удалил оператор импорта, потому что все файлы находятся в одном пакете, и тем не менее я получаю сообщение об ошибке «NumberRangeSummarizer не может быть преобразовано в тип Java (16777218)» при реализации NumberRangerSummarizer.
Я попытался восстановить вашу проблему, где все три файла существуют в папке src, и это сработало без import numberrangesummarizer;.
Вы пробовали удалить это утверждение?
Вообще говоря, это плохая практика для файлов, не входящих в именованный пакет
При удалении оператора импорта возникает ошибка «общедоступный класс NumberRangeSummarizerImpl реализует NumberRangeSummarizer {» NumberRangeSummarizer не может быть преобразован в тип Java (16777218). Возможно, у вас есть файлы? я не могу заставить свою работать
@MillsBills Вы пытались очистить и перестроить решение? Иногда при рефакторинге дела идут плохо.
чистая сборка сработала, черт бы побрал этот мир за эти ничтожные проверки реальности
это: импортировать numberrangesummarizer; выглядит очень коварно. Это имя пакета. Вы импортируете классы, а не пакеты, или добавляете .* в конце, указывая, что вы импортируете все классы в этом пакете.