Gå til innhold

Anbefalte innlegg

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 av Audun0505
Lenke til kommentar
Videoannonse
Annonse

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;
  }
}
  • Liker 1
Lenke til kommentar

 

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...