• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Meinem array feld[][] wird scheinbar kein Wert zugewiesen.

Status
Für weitere Antworten geschlossen.

Corvulus

Aktives Mitglied
PHP:
<?php
// Füllen des Feldes:
for ($i = 1; $i <= 9; $i++) {
	for ($j = 1; $j <= 9; $j++) {
		$array[$i][$j] = 0;
	}
}
// <- testweise mit nullen
for ($k = 1; $k <= 7; $k = $k + 3) {
	$stop = $start + 2;  //Unterscheidung in oben-links, mitte und unten-rechts.
	for ($i = $start; $i <= $stop; $i++) {
		for ($j = $start; $j <= $stop; $j++) { //Die beiden Hauptschleifen für das jeweilige 3x3 Feld.
			$x = 0;
			while ($x = 0) { //Es wird so lange eine Zufallszahl generiert, bis es eine noch nicht gibt. ($check "0" bleibt)
				$zufall = rand (1, 9);
				$check = 0;
				for ($l = $start; $l <= $stop; $l++) {
					for ($m = $start; $m <= $stop; $m++) { //Diese beiden schleifen gehen jedes Feld einmal durch...
						if ($zufall == $feld[$l][$m]) $check = 1; //...Überprüfung des Feldes (im 3x3 Feld), ob diese Zufallszahl vorhanden ist.
					}
				}
				if ($check == 0) { //Ist diese Bedingung wahr, dann wird...
					$feld[$i][$j] = $zufall; //...das aktuelle Feld mit der Zufallszahl gefüllt...
					$x = 1; //...und x auf 1 gestzt und die Schleife damit am Ende des Durchlaufs abbricht.
				}
			}
		}
	}
}
//Testausgabe
echo"<table>";
for ($i = 1; $i <= 9; $i++) {
	echo "<tr>";
	for ($j = 2; $j <= 10; $j++) {
		echo "<td>";
		echo $feld[$i][$j]; //Ausgabe in Tabelle
		echo "</td>";
	}
	echo "</tr>";
}
echo "</table>";
?>

Ich weiß nicht, an welcher Stelle der Fehler liegt, bzw. warum das Array (feld[][]) nicht gefüllt wird. Habe schon einige Varianten und Änderungen in Sachen Ausgabe und Co. Probiert. Das Programm soll mal ein Sudoku Generator werden und füllt zur Zeit drei 3x3-Felder.

Gruß Corvulus
 
Werbung:
Was möchtest du denn bezwecken? Der Code sieht ziemlich geschachtelt und nicht sehr effektiv aus ;)

btw: Falls du 9 Zufallszahlen haben willst:

PHP:
$zufall = shuffle(range(0,9));
(ungetestet)
 
Achso: Der Code Funktioniert zumidnest vom Algorythmus her. Habe dieses Programm mti dem gleichen aufbau in Blitz Basic geschrieben - klappt wunderbar. Die Befehle alle nach PHP hin veränder etc.
Bezwecken möchte ich, dass bei einem 9x9 Sudoku Feld das 3x3-Feld links oben, rechts unten und das in der mitte gaaaaaanz zufäälig gefüllt wird. Der Rest des Feldes soll ersteinmal nur mit "0" gefüllt sein.

Gruß Corvulus

EDIT: Also in meinem PHP Buch steht, der Zufall so wie ich ihn gemacht habe - zwar für einfache Vars, aber dachte das übertrag ich mal - teste deinen Code mal.
 
Werbung:
In meinem Code war schonmal mindestens ein kleiner Fehler, die Funktion leutet shuffle() und nicht array_shuffle() ^^

Also dein Code sieht recht kompliziert für sowas aus, wenn du willst kann ich dir einen entsprechenden Code machen ;)
 
Also das mit dem shuffle klappt nicht. Der Code ist so schon in Ordnung, kompliziert, aber in Ordnung. Ich möchte ja wissen, wo der Fehler liegt, ein Ergebniss zu bekommen ist so langweilig wie in der Schule von der Tafel abzuschreiben.

Gruß Corvulus
 
Hmm, benutzt du error_reporting? In Zeile 10 benutzt du eine Variable $start, die du vorher nicht definiert hast.


Aber egal obs dir passt oder nicht, ich werd selber einen ordentlichen Code machen :p
 
Werbung:
Hrr, hrr, hrr. Nee, will Hilfe. Das mit der Variabele hab ich noch garnicht gesehn... :p
$k --> $start
Da hab ich mich vertan, aber es klappt imemr noch nicht. *wunder*

Corvulus
 
Bevor du die erste Schleife startest, definiere mal "$array = array();"
 
Hat auch nichts geholfen. Hab mir mal alle Werte der Schleifen ausgeben lassen: Funktionieren bestens. Irgendetwas stimmt nur nicht mit dem Zufall und dem Array... *kopfzerbrech*

Gruß Corvulus
 
Werbung:
Ok, ganz doofer Fehler :>


Schau mal genau dahin:
PHP:
while ($x = 0) {



/E: Auch wenns dich nicht interessiert:
PHP:
$sudoku = array();
$zufall = array();
for($i = 0 ; $i < 3 ; $i++){
	$arr = range(1,9);
	shuffle($arr);
	$zufall[] = $arr;
}
for($j = 0 ; $j < 3 ; $j++){
	for($k = 0 ; $k < 9 ; $k++){
		$sudoku[$j*3 + $k%3][floor($k / 3) + $j*3] = $zufall[$j][$k];
	}
}
;D
 
Zuletzt bearbeitet von einem Moderator:
= ist ein Zuweisungsoperator
== ist ein vergleichsoperator


Theoretisch müsste deine Schleife unendlich lange durchlaufen :D



Sry, aber ich kanns einfach nicht sein lassen :>
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/html1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Testseite</title>
<style type="text/css">
input{
  width: 17px;
  height: 17px;
  margin: 0px -2px;
  text-align: center;
}
</style>
</head>
<body>
<?php
$sudoku = array();
$zufall = array();
for($i = 0 ; $i < 3 ; $i++){
	$arr = range(1,9);
	shuffle($arr);
	$zufall[] = $arr;
}
for($j = 0 ; $j < 3 ; $j++){
	for($k = 0 ; $k < 9 ; $k++){
		$sudoku[$j*3 + $k%3][floor($k / 3) + $j*3] = $zufall[$j][$k];
	}
}
for($i = 0 ; $i < 9 ; $i++){
	for($j = 0 ; $j < 9 ; $j++){
		echo "<input type=\"text\" ".(isset($sudoku[$i][$j]) ? "value=\"".$sudoku[$i][$j]."\" disabled=\"disabled\"" : "maxlength=\"1\"")." style=\"".($j%3 ? "" : "margin-left: 5px;").($i%3 ? "" : " margin-top: 5px; margin-bottom: 0px;")."\" name=\"".$i."|".$j."\"/>\n";
	}
	echo "<br />\n";
}
?>
</body>
</html>
:mrgreen:
 
Werbung:
Hätte man dran denken müssen, dass man in einer while-Schleife den VGL Operator nehmen muss... :-D PS: Dein Programm ist echt gut. ;-) Guter Einfall, den Zufall in ein Array zu packen. :-) Ich will das ganze so oder so in BlitzBasic schreiben. Wollte das "mal eben" (...) ner Freundin zeigen. Naja, vielen Dank!!!

Gruß Corvulus
 
Sag mal, hat das Ausführen des Scripts nicht 20 Sekunden gedauert und deinen Rechner ausgelastet (letzteres nur wenn du es lokal getestet hast)?

Da hätte dir doch eigentlich was auffallen müssen :mrgreen:
 
Also mir is scho klar, was du meisnt, aber das geht soweit (ich als das ganze pytal machen) *fg* Nee, also mit BB geht das auch in nem Bruchteil einer Sekunde. Werd mir dafür auch noch was besseres einfallen lassen müssen. Es geht mir im Moment um den Algorythmus des ganzen Programmes. Habe zig DinA4 Seiten voller Berechnungen und so gekritzelt. ;-) Macht mir halt Spaß soetwas.

Gruß Corvulus
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben