Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Robert Klemme Newsgroups: comp.lang.java.programmer Subject: Re: Finding Duplicate Values In An Array List Date: Thu, 10 Jul 2014 19:24:08 +0200 Lines: 78 Message-ID: References: <92f9302e-854e-4162-ad22-87900b4e7d5a@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net 0qijXEpSdbs36Zx+Tq9nOQ2zYMzS+lB5WdOnfifZJnYH506q8= Cancel-Lock: sha1:rxdVWmliz9PBSG7HAQ0Howkiej8= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 In-Reply-To: Xref: csiph.com comp.lang.java.programmer:29032 On 09.07.2014 16:47, Daniele Futtorovic wrote: > Here's another, shorter one: > > public static void main(String[] ss){ > Scanner sc = new Scanner(System.in); > Set sieve = new HashSet(); > List stash = new ArrayList(20); > > while( stash.size() < 20 ){ > System.err.printf( "Enter %d more number(s) between 10 and 100:%n", > 20 - stash.size() ); > String raw = sc.next(); > > try { > int input = Integer.parseInt(raw); > > if( input < 10 || input > 100 ){ > System.err.println( "Out of range: " + input ); > } > else if( ! sieve.add( input ) ){ > System.err.println( "Duplicate: " + input ); > } > else { > stash.add( input ); > System.err.println( stash ); > } > } > catch( NumberFormatException nfex ){ > System.err.println( "Not a number: " + raw ); > } > } Similar amount of lines, but differently distributed package golf; import java.util.BitSet; import java.util.Scanner; public class FiDuWa { private static final int LIMIT = 20; private static final int MIN = 10; private static final int MAX = 100; public static void main(String[] args) { @SuppressWarnings("resource") final Scanner scan = new Scanner(System.in); final StringBuilder stash = new StringBuilder(); final BitSet used = new BitSet(); while (used.cardinality() < LIMIT) { final int i = Integer.parseInt(scan.next()); if (i >= MIN && i <= MAX) { if (!used.get(i)) { if (!used.isEmpty()) stash.append(' '); stash.append(i); used.set(i); System.out.println(stash); } else System.err.println("Duplicate: " + i); } else { System.err.println("Not in range: " + i); } } } } The Java standard library is a remarkable beast and BitSets are probably underused. Kind regards robert