#java #loops #oop #linked-list #java.util.scanner
#java #циклы #ооп #связанный список #java.util.scanner
Вопрос:
У меня есть следующий код:
public static void main(String args[]) {
int maxSize = 10;
LinkedList<someObject> fifoList = new LinkedList<someObject>();
int item = 0;
int p = 0;
try {
scanner = new Scanner(myFile);
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
item = Integer.parseInt(line);
if(p == 0)
{
someObject myObj = new someObject();
//if the linked list is empty, add the item to the head of list
if(fifoList.isEmpty()){
myObj.setItem(item);
fifoList.add(myObj);
}
else{
//as long as the size of the list is less than maxSize
int pointer = 0;
if(fifoList.size() < p0Frames){
//if the item is not already in the list:
if(fifoList.get(pointer).getItem() != item){
myObj.setItem(item);
fifoList.add(myObj);
}
}
pointer ;
}
}
}
}
catch(FileNotFoundException e) {
System.out.println("File was not found");
e.printStackTrace();
}
for(someObject node: fifoList){
System.out.println(node.getItem());
}
}
У меня есть файл, содержащий следующие элементы:
13
13
13
13
13
14
14
19
17
17
17
18
17
При вводе этого файла я ожидаю, что мой LinkedList будет содержать 13, 14, 19, 17, 18. Однако, когда я распечатываю его, он печатает
13, 14, 14, 19, 17, 17, 17, 18, 17
Почему моя логика обнаруживает дубликаты только для первого числа (13), но игнорирует все дубликаты, которые появляются позже? Я также проверил значение указателя, и оно никогда не меняется, поэтому я предполагаю, что это также ошибка, которая вызывает это. Но я занимаюсь этим уже несколько часов и не могу понять, как ее решить. Любая помощь будет с благодарностью принята.
Комментарии:
1. Я получил 14 ошибок компилятора.
2. @Steephen извините, это не мой фактический код. это представление того, что у меня есть в моем файле.
3. Пожалуйста, не используйте репрезентативный код! Используйте реальный код, с которым вам нужна помощь. Мы хотели бы вам помочь, а вы мешаете нам.
Ответ №1:
Логика обнаружения дубликата требует цикла по элементам в fifoList
, в настоящее время значение pointer
сбрасывается на 0 для каждого элемента и, таким образом, проверяется только первое значение, поэтому все последующие значения, которые не равны 13
, добавляются успешно.
Код может быть исправлен следующим образом:
someObject myObj = new someObject();
//if the linked list is empty, add the item to the head of list
if(fifoList.isEmpty()){
myObj.setItem(item);
fifoList.add(myObj);
}
else if (fifoList.size() < p0Frames) {
//as long as the size of the list is less than maxSize
boolean found = false; // flag if fifoList contains the item
for (int i = fifoList.size() - 1; i >= 0 amp;amp; !found; i--) {
if(fifoList.get(i).getItem() == item) {
found = true;
}
}
if (!found) { // add missing value
myObj.setItem(item);
fifoList.add(myObj);
}
}
Вывод:
13
14
19
17
18