Forum: PC-Programmierung [PHP] CubeSim 2x2 Solver


von Paul S. (flughafen2)


Angehängte Dateien:

Lesenswert?

Bei meinem 2x2 Rubiks Cube Lösungsprogramm hagelt es Fehlermeldungen 
(über 20000) wie die folgenden:

( ! ) Notice: Uninitialized string offset: 9 in C:\...\2x2_solver.php on 
line 36
Call Stack
#  Time  Memory  Function  Location
1  0.0000  161872  {main}( )  ..\2x2_solver.php:0
2  0.0000  162256  all_positions( )  ..\2x2_solver.php:91
3  0.0070  212360  all_positions( )  ..\2x2_solver.php:81
4  2.2481  15531920  all_positions( )  ..\2x2_solver.php:81
5  2.2731  15679904  all_positions( )  ..\2x2_solver.php:81
6  2.6132  17793968  all_positions( )  ..\2x2_solver.php:81
7  2.6132  17794504  do_something( )  ..\2x2_solver.php:80
8  2.6132  17794504  move_multi( )  ..\2x2_solver.php:86
9  2.6181  17828528  move( )  ..\2x2_solver.php:58


( ! ) Notice: Uninitialized string offset: 9 in C:\...\2x2_solver.php on 
line 66
Call Stack
#  Time  Memory  Function  Location
1  0.0000  161872  {main}( )  ..\2x2_solver.php:0
2  0.0000  162256  all_positions( )  ..\2x2_solver.php:91
3  5.6013  33848712  all_positions( )  ..\2x2_solver.php:81
4  7.4784  43040664  all_positions( )  ..\2x2_solver.php:81
5  7.8194  44679592  all_positions( )  ..\2x2_solver.php:81
6  7.9145  45073344  do_something( )  ..\2x2_solver.php:80
7  7.9305  45188080  cube_is_solved( )  ..\2x2_solver.php:88


Wie kann man den Fehler beheben (eigentlich sollte dieser nicht 
vorkommen)?
Wenn der Fehler behoben ist schreibe ich hier noch einmal das ganze 
Programm hin.

Nun eine Info zum Programm: den Cube gibt man Flächenweise in 
Schreibrichtung ein (Oben,Vorne,Links,Hinten,Rechts,Unten). Das Programm 
sollte eine richtige Lösung kalkulieren (bisher allerdings nur mit U).

: Bearbeitet durch User
von Daniel A. (daniel-a)


Lesenswert?

Den Fehler habe ich nicht gefunden, ausprobiert hab ich das Programm 
auch nicht. Es kann jedoch einiges verbessert werden:
 1) do_something ist kein guter Funktionsname
 2) Strings sollten nicht als array missbraucht werden
 3) dashier:
  for ($i = 0; $i <= count($carray)-1; $i++)
  besser als foreach loop oder so:
  for($i=0,$n=count($carray); $i<$n; $i++)
  damit count nicht ständig aufgerufen wird und das -1 wegfällt
 4) Kommentare sind wichtig (vergesse ich auch gerne)
 6) php funktionen und HTML code trennen, dann lassen sich einfacher 
tests schreiben

Ausserdem: Wenn 3 Seiten eines Rubik's cube definiert sind, stehen alle 
anderen fest.

PS: Ich hab sowas mal mit c++ für nen packwürfel gemacht, in 3D! 
(monoskopisch)
PPS: Könnte mal jemand die Code-ansicht bei PHP-Dateien reparieren?

: Bearbeitet durch User
von Paul S. (flughafen2)


Angehängte Dateien:

Lesenswert?

Daniel A. schrieb:
> Ausserdem: Wenn 3 Seiten eines Rubiks Pocket Cube definiert sind, stehen alle
> anderen fest.

Das stimmt nicht:
- Das Farbschema ist nicht bekannt
- dadurch können Teile gleich sein obwohl sie es nicht sind
- Es können zwei Seiten gleicher Farbe sein

Außerdem ist die Eckenorientation der hinteren Ecke, von der keine 
Farben bekannt sind, relativ schwierig zuberechne.


Daniel A. schrieb:
1) do_something ist kein guter Funktionsname
Geändert.

2) Strings sollten nicht als array missbraucht werden
Das ist kein Missbrauch sondern ein Zugriff auf das Zeichen N.

3) dashier:
   for ($i = 0; $i <= count($carray)-1; $i++)
   besser als foreach loop oder so:
   for($i=0,$n=count($carray); $i<$n; $i++)
   damit count nicht ständig aufgerufen wird und das -1 wegfällt
Verbessert.

4) Kommentare sind wichtig (vergesse ich auch gerne)
Stehen nun bei jeder Funktion.

6) php funktionen und HTML code trennen, dann lassen sich einfacher
   tests schreiben
Wo ist Nummer 5?

Es sind doch nur 19994 Fehlermeldungen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.