Audun0505 Skrevet 29. september 2014 Del Skrevet 29. september 2014 (endret) Har begynt smått med java, men sitter fast på et array-problem her. Programmet skal skrive MAX tilfeldige tall til en array med lengde 10, og et tall skal ikke kunne skrives ut to ganger. Jeg har laget en metode som sjekker om tallet finnes i arrayen, som returnerer true hvis den gjør det, men hvordan skal jeg bruke den? Det er det [if(!nTest(t))] i nederste for-løkke jeg lurer på hvordan jeg skal endre. Noen tips? public boolean nTest (int y) { boolean check = false; for(int i = 0; i < array.length; i++) { if (y == array[i]) { check = true; } } return check; } public void setNumber() { for(int i = 0; i < array.length; i++) { int t = 0; while(t < MIN) { t = (int) (Math.random() * MAX); } if(!nTest(t)) array[i] = t; } } Endret 29. september 2014 av Audun0505 Lenke til kommentar
jonny Skrevet 30. september 2014 Del Skrevet 30. september 2014 Jeg forstår ikke helt hva programmet ditt skal gjøre. Du skriver "programmet skal skrive MAX tilfeldige tall til en array med lengde 10, og et tall skal ikke kunne skrives ut to ganger", som ikke gir så mye mening - det er da ikke nødvendig å skrive mer enn 10 tall til array'en hvis array'en har lengde 10? Mener du egentlig at tallene som skal skrives til array'en skal ha tilfeldige verdier i området MIN til MAX? Det er slik jeg tolker at koden din forsøker å gjøre, i allefall. if-testen din nederst i setNumber() gir bare verdi til element nr. 'i' hvis verdien ikke fantes i array'en fra før, hvis den fantes hopper den bare til neste verdi i array'en. Den enkleste måten å sørge for at det blir skrevet en verdi til alle elementer i array'en er å å legge til 'else --i' etter denne if'en. Her er et forslag til hvordan oppgaven kan løses, forutsatt at jeg har forstått oppgaven riktig. public static boolean arrayContains(int[] array, int value) { for (int v : array) if (v == value) return true; return false; } public void fillArray() { if ((MAX - MIN + 1) < array.length) throw new IllegalStateException("(MAX-MIN+1) < array.length, impossible " + "to generate unique values for all elements in array"); int i = 0; while (i < array.length) { int v = MIN + (int)(Math.random() * (MAX - MIN + 1)); if (!arrayContains(array, v)) array[i++] = v; } } 1 Lenke til kommentar
Audun0505 Skrevet 30. september 2014 Forfatter Del Skrevet 30. september 2014 Jeg forstår ikke helt hva programmet ditt skal gjøre. Du skriver "programmet skal skrive MAX tilfeldige tall til en array med lengde 10, og et tall skal ikke kunne skrives ut to ganger", som ikke gir så mye mening - det er da ikke nødvendig å skrive mer enn 10 tall til array'en hvis array'en har lengde 10? Mener du egentlig at tallene som skal skrives til array'en skal ha tilfeldige verdier i området MIN til MAX? Det er slik jeg tolker at koden din forsøker å gjøre, i allefall. if-testen din nederst i setNumber() gir bare verdi til element nr. 'i' hvis verdien ikke fantes i array'en fra før, hvis den fantes hopper den bare til neste verdi i array'en. Den enkleste måten å sørge for at det blir skrevet en verdi til alle elementer i array'en er å å legge til 'else --i' etter denne if'en. Her er et forslag til hvordan oppgaven kan løses, forutsatt at jeg har forstått oppgaven riktig. public static boolean arrayContains(int[] array, int value) { for (int v : array) if (v == value) return true; return false; } public void fillArray() { if ((MAX - MIN + 1) < array.length) throw new IllegalStateException("(MAX-MIN+1) < array.length, impossible " + "to generate unique values for all elements in array"); int i = 0; while (i < array.length) { int v = MIN + (int)(Math.random() * (MAX - MIN + 1)); if (!arrayContains(array, v)) array[i++] = v; } } Akkurat det jeg lurte på ja, og fikk det til å funke med koden din. Tusen takk! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå