Przypisanie wartości losowym polom w tablicy

Przypisanie wartości losowym polom w tablicy
kakaku
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 20
0

Witam. Chciałbym napisać program, który w tablicy 10x10 ustawi w losowo wybrane pola 10 liczb "1", a reszta pól żeby była "0". Ma to działać jak gra Saper. Czyli jak przy odpaleniu nowej planszy w Saperze program "rozrzuca" bomby po planszy. Chciałem to rozwiązać w taki sposób:

Kopiuj
package Saper;

import java.util.Random;

public class Saper 
{
	public static void main(String[] args) {
		int x,y;
		int[][] tablica=new int[10][10];

		for(int j=0;j<=10;j++)
		{
			for(int i=0;i<=10;i++)
			{
				Random osX=new Random();
				x=osX.nextInt(10);
				Random osY=new Random();
				y=osY.nextInt(10);
				if(j==y && i==x)
				{
					tablica[x][y]=1;
				}
				if(j!=y && i!=x)
				{
					tablica[x][y]=0;
				}
				System.out.print(tablica[x][y]+"  ");
			}
			System.out.println();
		}
	}
}

Tutaj jest mój problem,ponieważ liczba "1" nie pojawia się 10 razy. Wiem, że powinienem najpierw przypisać wszystkim polom zera, a następnie już poza pętlą "rozrzucić" bomby czyli "1". Jak to zrobić bo już się pogubiłem...? Z góry dzięki za odpowiedzi!

dodanie znacznika <code class="java"> - furious programming

  • Rejestracja: dni
  • Ostatnio: dni
1

Ehh... nie moge edytowac a tamto jest zle:

Kopiuj
int[][] tablica=new int[10][10];
 
//tutaj wypelnienie zerami
 
Random r = new Random();
int x,y;
for(int i=0;i<10;)
{
   x=r.nextInt(10);
   y=r.nextInt(10);
   if(tablica[x][y]==0)
   {
      tablica[x][y] = 1;
      i++;
   }
}
kakaku
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 20
0

Na dzisiaj się poddaje. Nie wychodzi mi. Drukuje mi tylko dziesięć "1" jedna pod drugą,a nie całą tablicę. Czyli bez zer, i nawet nie widzę czy są dobrze ułożone i zmieniają pozycję czy ponownym uruchomieniu...

Progress
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 220
1

Nie wiem dlaczego rozwiązanie kolegi Ci nie działa, tu masz moją propozycje, nie pisze w javie wiec mało eleganckie rozwiązanie, ale działające.

Kopiuj
package javaapplication9;
import java.util.Random;

public class JavaApplication9 {

    public static void main(String[] args) {
        
        int[][] tablica=new int[10][10];
        
        for(int j=0;j<10;j++)
        {
            for(int i=0;i<10;i++)
            {
                    tablica[i][j]=0;
            }
        }
        
        Random random = new Random();
        int x,y;
        for(int i=0;i<10;)
            {
                x=random.nextInt(10);
                y=random.nextInt(10);
                if(tablica[x][y]==0)
                {
                    tablica[x][y] = 1;
                     i++;
                }
            }
        
        for(int j=0;j<10;j++)
        {
            for(int i=0;i<10;i++)
            {
                 System.out.print(tablica[i][j]+"  ");
            }
            System.out.println();
        }

    }
    
}

dodanie znacznika <code class="java"> - furious programming

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

nie poddawaj się. pełny sposób użytkownika v00gl. (przy takiej planszy i ilości bomb jest okey)

Kopiuj
import java.util.*;

public class Main {
	public static void main(String[] args) {
		int[][] arr = new int[10][10];
		for(int[] row : arr) {
			Arrays.fill(row,0);
		}

		Random rnd = new Random();
		int row, col;
		for(int i = 0; i < 10; ) {
			row = rnd.nextInt(10);
			col = rnd.nextInt(10);
			if(arr[row][col] == 0) {
				arr[row][col] = 1;
				++i;
			}
		}
		for(int[] rr : arr) {
			System.out.println(Arrays.toString(rr));
		}

	}
}

kakaku
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 20
0

ok, dzięki. działa! :) Tylko mam jeszcze jedno pytanie, Czy mógłby mi ktoś wyjaśnić dlaczego mój kod nie działa?

Kopiuj
public static void main(String[] args) 
	{
		int x=10,y=10;
		int[][] tablica=new int[x][y];
		for(y=0;y<10;y++)
		{
			for(x=0;x<10;x++)
			{
				tablica[y][x]=0;
				System.out.print(tablica[y][x]+"  ");
			}
			System.out.println();
		}
		int x1,y1;
		Random r1 = new Random();
		Random r2 = new Random();
		for(int j=0;j<10;j++)
		{
			for(int i=0;i<10;i++)
			{
				x1=r1.nextInt(10);
				y1=r2.nextInt(10);
				tablica[y1][x1] = 1;
				System.out.print(tablica[y1][x1]+"  ");
			}
			System.out.println();
		}
	}
dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
1

Ponieważ nie robisz tego co Ci pokazują. Wystarczy jedna pętla, a to

Kopiuj
for(int j=0;j<10;j++)
        {
            for(int i=0;i<10;i++)
            {
                x1=r1.nextInt(10);
                y1=r2.nextInt(10);
                tablica[y1][x1] = 1;
                System.out.print(tablica[y1][x1]+"  ");
            }
            System.out.println();
        }

100 razy losuje pole w tablicy i wpisuje tam 1 nie zawracając sobie głowy tym czy wcześniej to pole zostało wylosowane i ta jedynka już tam jest.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.