» »

Java-random-polje

Java-random-polje

Karton44444 ::

Živijo,
rabil bi pomoč pri nalogi.

Naloga pravi, da moram naredit polje 7x5, ki bo vsebovala random števila.
Ponavljat pa se ne smejo tudi v isti vrstici in stoplcu, tole pa ne znam narediti...

Prišel sem do tukaj, naprej pa ne bi znal.

Random ran =new Random();
int [][] raa = new int [7][5];
for(int x = 0; x < 7; x++){
for(int y = 0; y < 5; y++){
raa[x][y] = ((ran.nextInt(9))+1);
}
}

Hvala za pomoč.
Primer kako bi moralo zgledati:
2 7 4 8 6
1 9 6 5 4
5 3 9 4 7
3 5 2 6 8
8 4 1 9 2
7 6 8 2 9
9 2 7 1 5

LP

bleem ::

probaj premislit v tej smeri .. preden številko shraniš v array si jo posreduj novi metodi, ki potrebuje podatke v kateri vrstici in stolpcu se nahajas in preveris če se ta številka že kje pojavlja, če se ne jo shraniš v array, če pa se pa jo vzames drugo nakljucno stevilo.

_Dormage_ ::

Še dve for zanki, ki preverita, če je izbrano random število že uporabljeno bodisi v vrstici ali stolpcu.
Če je še enkrat vržeš kokcko :)

Spura ::

2 zanki vseskupaj sta dovolj za ta primer se mi zdi.

Rokm ::

Problem je kadar prideš do kakšne take situacije:
5 6 7 8 9
4 5 6 7 8
3 4 5 6 7
2 3 4 5 6
6 7 8 9 5
9 1 2 3 4
1 2 3 4 _

Tako da nekakšen backtrack bo potrebno implementirat če hočeš da so rešitve naključne in pravilne.

Spura ::

To ni problem IMO, pac rekurzivno definiras.

LeQuack ::

Jaz sem rešil na stari dobri iterativni način, in sicer z uporabo poolov možnih številk.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * Program generira matriko dimenzij VRSTICE_ST x STOLPCI_ST z nakljucnimi stevili od
 * 1-9, ki se ne ponavljajo horizontalno ali vertikalno.
 */
public class RandomNumbers {
	public static void main(String[] args) {
		// Stevilo vrstic ter stolpcev matrike
		final int VRSTICE_ST = 7;
		final int STOLPCI_ST = 5;

		// Seznam poolov, iz katerih jemljes stevila, STOLPCI_ST horinzontalno ter VRSTICE_ST vertikalno
		List<List<Integer>> vrsticePools = new ArrayList<List<Integer>>(VRSTICE_ST);
		List<List<Integer>> stolpciPools = new ArrayList<List<Integer>>(STOLPCI_ST);

		// Vsak pool napolnimo s stevili od 1-9
		for (int i = 0; i < VRSTICE_ST; i++)
			vrsticePools.add(new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8,9)));
		for (int i = 0; i < STOLPCI_ST; i++)
			stolpciPools.add(new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8,9)));

		// Definiramo matriko pravih dimenzij
		int[][] matrika = new int[VRSTICE_ST][STOLPCI_ST];
		// Generator nakljucnih stvari
		Random ran = new Random();

		// Gremo skozi vse vrstice
		for (int i = 0; i < VRSTICE_ST; i++) {
			// Gremo skozi vse stolpce
			for (int j = 0; j < STOLPCI_ST; j++) {
				// Za strenutno vrstico in stolpec vzamemo pool moznih stevilk
				List<Integer> stolpecPool = stolpciPools.get(j);
				List<Integer> vrsticaPool = vrsticePools.get(i);

				// Ponavljamo zanko (izbira nakljucne stevilke) dokler ne najdemo stevilko, 
				// ki obstaja v obeh poolih
				while (true) {
					// Pridobi nakljucni index iz moznih indeksov za pool
					int index = ran.nextInt(stolpecPool.size());
					// Za ta index pridobi stevilko iz poola za stolpec
					int izbranaStevilka = stolpecPool.get(index);
					// Preverimo, ce to stevilo obstaja tudi v poolu za vrstico
					int vrIndex = vrsticaPool.indexOf(izbranaStevilka);

					// Stevilka obstaja v obeh poolih, imamo zadetek
					if (vrIndex > -1) {
						// Pobrisemo stevilko iz obeh poolov
						stolpecPool.remove(index);
						vrsticaPool.remove(vrIndex);
						// Matriki dodamo to stevilko
						matrika[i][j] = izbranaStevilka;
						// Izhod iz zanke
						break;
					}
				}

			}
		}
		
		// Izpisi matriko na standard output
		for (int i = 0; i < VRSTICE_ST; i++) {
			for (int j = 0; j < STOLPCI_ST; j++) {
				System.out.print(matrika[i][j] + " ");
			}
			System.out.println();
		}
	}
}
Quack !

Zgodovina sprememb…

  • spremenil: LeQuack ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java - DN] Naključna števila

Oddelek: Šola
121362 (891) nyler
»

Naloga iz Putka - UPM

Oddelek: Programiranje
242222 (1558) NejcSSD
»

Java skeniranje map in podmap

Oddelek: Programiranje
61157 (1046) nightrage
»

Rekurzija v javi z ArrayList

Oddelek: Programiranje
81586 (1429) marjan_h
»

Naloga v C#

Oddelek: Programiranje
72615 (2115) Hardstyle

Več podobnih tem