Gå til innhold

Random int[][] tabell


Gjest Slettet-yXKhlxsjUZ

Anbefalte innlegg

Gjest Slettet-yXKhlxsjUZ

Hei!

 

Noen som hadde giddet forklare meg hvordan jeg kan lage en int[][] som printer ut noe slikt med et x antall 1'ere og resten 0'ere:

 

0001000010

0100010000

0000000100

0000100000

0100001000

 

størrelsen er ikke så viktig, men skal vel være rundt 10*5.

 

Mvh Christian

Lenke til kommentar
Videoannonse
Annonse

Det var en heller underlig forespørsel, men men...

 

Enkleste ville være å kjøre en dobbel for-løkke, og så kalle random() i java.lang.math, som du runder av til nærmeste int.

 

int[][] binTall = new int[10][5];
for(int i = 0; i < 5; i++){
 for(int j = 0; j <; j++){
    binTall[i][j] = Math.floor(Math.random() + 0.5);
 }
}

 

Har ikke testet, men skulle funke.

 

Mer info, math, floor, round.

 

 

[EDIT]

La ikke merke til at du ville begrense antall 1, men det er jo lett med en teller (som teller ned), og hvis den j+teller = 10, sett resten til 1 (eller sett j = 0, men da kan programmet fortsette i all evighet)...

Overlater den delen til deg :)

[/EDIT]

Endret av Mr.Garibaldi
Lenke til kommentar

import java.lang.Math;


class BitGen1{
int[][] lagArray(int i, int j){
 //int=5;
 //int j=10;
 int[][] array = new int[i][j];
 for(int x = 0; x < array.length; x++){
    for(int y = 0; y < array[0].length; y++){
        array[x][y] = (int) Math.floor(Math.random() + 0.5); /*konverterer alle double fra resultatene fra Math.funksjonene til int-verdier.*/
 	}
 }
 return array;
 }
 
 void printArray (int[][] array){
     int j;
     for(int i=0; i<array.length; i++){
         System.out.println("[ " + array[i] + " ]");
 	for(j=0; j<array[0].length; j++){
                  System.out.print("[ " + array[i][j] + " ]");
 	}
          }
  }
 public static void main (String[] args) {
    BitGen1 obj = new BitGen1();
    int[][] binArray = obj.lagArray(10,5);
    obj.printArray(binArray);
}
}

 

Gir et rart resultat:

[ [I@16f0472 ]
[ 0 ][ 1 ][ 1 ][ 0 ][ 1 ][ [I@18d107f ]
[ 1 ][ 0 ][ 0 ][ 0 ][ 0 ][ [I@360be0 ]
[ 1 ][ 1 ][ 0 ][ 1 ][ 1 ][ [I@45a877 ]
[ 1 ][ 1 ][ 1 ][ 0 ][ 0 ][ [I@1372a1a ]
[ 0 ][ 1 ][ 1 ][ 0 ][ 1 ][ [I@ad3ba4 ]
[ 0 ][ 1 ][ 0 ][ 0 ][ 1 ][ [I@126b249 ]
[ 1 ][ 1 ][ 0 ][ 0 ][ 0 ][ [I@182f0db ]
[ 0 ][ 1 ][ 1 ][ 0 ][ 0 ][ [I@192d342 ]
[ 0 ][ 1 ][ 1 ][ 1 ][ 1 ][ [I@6b97fd ]
[ 0 ][ 1 ][ 1 ][ 0 ][ 0 ]

 

Hva er feil her? Jeg tror problemet ligger i at den bare skriver ut adressen til [j], og ikke verdien. Driver enda og finner ut om å legge inn antall enere. Stay tuned for videre progresjon. :)

Endret av mungo
Lenke til kommentar

Heisann

 

Her er min løsning av problemstillingen. Jeg valgte en litt annen løsning. Jeg brukte Math.random til å finne en posisjon istede for 0/1. Fungerer som smurt, uansett hvor bred, høy eller hvor mange 1'ere du trenger.

 

 

	public static void main(String[] args) {
 int width = 5;
 int height = 10;
 int maxNumberOf1 = 5;

 //Fyller først hele greia med 0
 int[][] array = new int[width][height];
 for (int i = 0; i < array.length; i++) {
 	for (int j = 0; j < array[0].length; j++) {
   array[i][j] = 0;
 	}
 }

 //Fyller inn x antall 1ere
 int teller = 0;
 while(teller<maxNumberOf1){
 	int x = (int) Math.floor(Math.random() * width);
 	int y = (int) Math.floor(Math.random() * height);
 	if(array[x][y]==0){
   array[x][y]=1;
   teller++;
 	}
 }
 
 //Printer ut hele "stasen"
 for (int i = 0; i < array.length; i++) {
 	for (int j = 0; j < array[0].length; j++) {
   System.out.print(array[i][j]);
 	}
 	System.out.println();
 }
}

 

Vennlig hilsen

High Voltage

Lenke til kommentar
  • 3 uker senere...

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...