2014-11-06 5 views
0

я построю удаление дубликатов, но я имею в виду, как использовать метод, который удаляет повторяющиеся элементы из списка массива целых чисел, используя следующий заголовок:удалить дубликаты с помощью метода

public static void removeDuplicate(ArrayList<Integer> list) 

написать тестовую программу, которая предлагает пользователю ввести 10 целых чисел в список, а отображает отдельные целые числа, разделенные ровно одним пробелом.

import java.util.ArrayList; 

import java.util.Scanner; 

public class RemoveDuplicates { 
    public static void main(String[] args){ 
    ArrayList<Integer>list = new ArrayList<Integer>(); 

    Scanner input = new Scanner (System.in); 
    System.out.print("Enter integers (input ends with 0): "); 
    int value; 

    do{ 
     value = input.nextInt(); 
     if(!list.contains(value)&& value !=0) 
      list.add(value); 
    }while (value !=0); 

    input.close(); 
    for (int i = 0; i < list. size(); i++) 
      System.out.print(list.get(i) + " "); 
    } 
} 

Это мой код, пожалуйста, изменив пожалуйста, как использовать метод и тест.

+0

Как я могу удалить? Извините, у этого вопроса есть ответы и их нельзя удалить; Вместо этого отметьте это для замедлителя внимания. Это сообщение показывает. – Young

+0

вы также можете просто оставить его здесь. В этом вопросе нет ничего плохого. И, может быть, кто-то может выиграть от этой темы. Кроме того, вы можете принять один из ответов, нажав на прозрачный «крючок» слева от него. Таким образом, другим читателям легче найти ответ, который помог вам самому, а другие не будут реагировать, поскольку «вопрос закрыт» – GameDroids

+0

О, я вижу, спасибо – Young

ответ

2

Если я правильно понимаю, вы должны реализовать метод с этим заголовком

public static void removeDuplicate(ArrayList<Integer> list) 

судя по его имени, я бы сказал, что метод должен удалить дубликаты из списка, а не (как вы делаете это прямо сейчас) цикл while-while во время ввода.

So сначала удалите проверку в своем цикле (if(!list.contains(value)&& value !=0)) и просто добавьте все числа, которые пользователь вводит в список.

После этого вы можете позвонить по методу removeDuplicate(list);. Если вы хотите, вы можете добавить этот вызов в свой цикл, и он будет выполнен после каждого ввода или вы выполните его только один раз, когда вход будет закрыт.

Теперь реализации метода:

public static void removeDuplicate(ArrayList<Integer> list) { // this is the header you need to use 

Проблема здесь есть, метод знает список, но не элемент, который является возможным дубликатом. Таким образом, вы должны смотреть на это

for (int i = 0; i < list.size(); i++) { // iterate through every element in the list 
     Integer current = list.get(i);  // for convenience, save the current list item in a variable 

Таким образом, вы проверяете каждое целое число в списке - по одному .. но если вы хотите знать, если целое число существует во второй раз, вы должны искать хвост список. Значит, вам нужно проверить подписок после i.

 List sublist = list.subList(i + 1, list.size()); // the sublist with all elements of the list from i+1 to the end 

ваш list.contains(value) линия правильно, вы можете использовать его здесь. Только теперь вы вызываете его на подсписке

 if(sublist.contains(current)){ // checks if the number is in the sublist 
      sublist.remove(current); // removes the number from the sublist 
     } 

Это, однако, было бы только удалить первый дублировать. Кроме того, вы можете удалить каждый элемент в списке, который равняется current целого:

 while (sublist.contains(current)) { 
      sublist.remove(current); 
     } 

И это все. Ваш метод закончен.

} 
} 

Закончен, потому что вы фактически работаете над одним и только списком в своей программе.Даже при удалении целого числа от вашего sublist, он фактически отстранен от sublist и реального списка (The sublist просто ссылка, а не фактический список самостоятельно)

EDIT

для вашего удобства здесь полный код с обоими методами. Если вы сравните код с вашим, вы увидите, что это не так много:

public static void main(String[] args) { 
    ArrayList<Integer> list = new ArrayList<Integer>(); 

    Scanner input = new Scanner(System.in); 
    System.out.print("Enter integers (input ends with 0): "); 
    int value; 

    do { 
     value = input.nextInt(); 
     if (value != 0) {  // this changed: add every number except 0 
      list.add(value); 
     } 
    } while (value != 0); 

    input.close(); 

    removeDuplicate(list); // here you make the call for the new method 

    for (int i = 0; i < list.size(); i++) { 
     System.out.print(list.get(i) + " "); 
    } 
} 

// and this is the new method 
public static void removeDuplicate(ArrayList<Integer> list) { 
    for (int i = 0; i < list.size(); i++) { 
     Integer current = list.get(i); 
     List sublist = list.subList(i + 1, list.size()); 
     while (sublist.contains(current)) { 
      sublist.remove(current); 
     } 
    } 
} 
+1

:) просто удалите мои комментарии и скопируйте код строк один за другим в вашем редакторе, и у вас есть полный метод 'removeDuplicate'. Поместите этот метод в тот же файл, над которым вы сейчас работаете, просто поставьте его * под * public static void main (String [] args) {...} 'method – GameDroids

+0

Единственное, что вам нужно изменить: * * remove ** 'if (! list.contains (value) && value! = 0)' и ** add ** 'removeDuplicate (list);' after 'input.close();' – GameDroids

+1

см. редактирование в моем ответе , Я выставил весь код. – GameDroids

Смежные вопросы