|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
[Java] clonare array multiplo
salve. ho un array che ha la bellezza di 4 (quattro
![]() ![]() e come se non bastasse vorrei addirittura clonarlo ![]() l'array é un array di enum, orientativamente la struttura é questa: Codice:
enum MyEnum { ONE, TWO, THREE, FOUR, }; ... MyEnum[][][][] array = { ... }; Codice:
MyEnum[][][][] array2 = array.clone(); array[0][0][0][0] = ONE; array2[0][0][0][0] = TWO; assert array[0][0][0][0] == ONE; assert array2[0][0][0][0] == TWO; PS: comunque tranquilli, complessivamente l'array contiene solamente 162 elementi (3*3*3*6) ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Potresti scrivere 4 metodi clone ognuno dei quali prende in input un array a n dimensioni con n da 1 a 4. Quello che prende un array a 4 dimensioni richiama il metodo che prende un array a 3 che richiama quello da 2 che richiama quello da 1. Così da un lato è semplice scrivere i metodi e dall'altro puoi riutilizzarli qualora ti servissero dei metodi clone per array a n dimensioni con n non necessariamente 4.
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Quote:
Curisosità personale: cosa c'è di scomodo nell'annidare 4 for - manco ti servono le graffe - ?
__________________
Il sole è giallo |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi clonare un array di array ma il risultato è una copia della radice che condivide i componenti dal secondo livello in poi (cioè non serve a una cippa).
Usa i for. Ps.: un array di array di array di array è una vera schifezza.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
grazie per le risposte, si alla fine ho usato i for e tanti saluti.
PGI, lo so che é una schifezza ma tu come rappresenteresti in memoria un cubo di Rubik? ![]() ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Non essendomi mai cimentato con i cubi di Rubik non so se la proposta sia sensata o meno.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 04-03-2010 alle 13:27. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Quote:
In ogni caso nascondi tutto sotto il tappeto di un oggetto ma immagino che tu abbia già la tua classettina CuboDiRubik.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ehi fero, non so se ti può interessare, ma questo sito è una miniera di informazioni circa la soluzione del cubo di Rubik e presenta delle tecniche visivamente tramite applet carine con cubi in 3D.
Magari ti ispira, tiè: http://lar5.com/cube/
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#10 | ||||
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
Quote:
Quote:
Quote:
![]() so giá risolvere il cubo di Rubik ma uso una tecnica molto lenta (richiede parecchie mosse), mi divertirebbe molto impararne una piu veloce! ![]() |
||||
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
se vi interessa, per ora la classe che rappresenta il cubo é fatta cosi:
Codice:
public final class Cube { private static boolean isInternal(int i, int j, int k, int l) { Face face = Face.values()[l]; switch (face) { case GREEN: if (i != 0) { return true; } break; case YELLOW: if (j != 2) { return true; } break; case RED: if (k != 2) { return true; } break; case ORANGE: if (k != 0) { return true; } break; case BLUE: if (j != 0) { return true; } break; case WHITE: if (i != 2) { return true; } break; } return false; } /** * Array tridimensionale di cubetti; ogni cubetto e' un array di 6 facce. * THIS... IS... RUBIIIK!!! */ public Face[][][][] faces = new Face[3][3][3][6]; { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 6; l++) { if (isInternal(i, j, k, l)) { faces[i][j][k][l] = Face.INTERNAL; } else { faces[i][j][k][l] = Face.values()[l]; } } } } } } private Face[][][][] duplicateCube() { Face[][][][] newCube = new Face[3][3][3][6]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 6; l++) { newCube[i][j][k][l] = faces[i][j][k][l]; } } } } return newCube; } public void rotateY(int tier, boolean clockwise) { Face[][][][] newCube = duplicateCube(); if (clockwise) { final int[] facePermutation = { 0, 3, 1, 4, 2, 5, }; for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 6; l++) { newCube[tier][k][2 - j][facePermutation[l]] = faces[tier][j][k][l]; } } } } else { final int[] facePermutation = { 0, 2, 4, 1, 3, 5, }; for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 6; l++) { newCube[tier][2 - k][j][facePermutation[l]] = faces[tier][j][k][l]; } } } } faces = newCube; } public void rotateZ(int tier, boolean clockwise) { Face[][][][] newCube = duplicateCube(); if (clockwise) { final int[] facePermutation = { 2, 1, 5, 0, 4, 3, }; for (int i = 0; i < 3; i++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 6; l++) { newCube[k][tier][2 - i][facePermutation[l]] = faces[i][tier][k][l]; } } } } else { final int[] facePermutation = { 3, 1, 0, 5, 4, 2, }; for (int i = 0; i < 3; i++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 6; l++) { newCube[2 - k][tier][i][facePermutation[l]] = faces[i][tier][k][l]; } } } } faces = newCube; } public void rotateX(int tier, boolean clockwise) { Face[][][][] newCube = duplicateCube(); if (clockwise) { final int[] facePermutation = { 4, 0, 2, 3, 5, 1, }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int l = 0; l < 6; l++) { newCube[2 - j][i][tier][facePermutation[l]] = faces[i][j][tier][l]; } } } } else { final int[] facePermutation = { 1, 5, 2, 3, 0, 4, }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int l = 0; l < 6; l++) { newCube[j][2 - i][tier][facePermutation[l]] = faces[i][j][tier][l]; } } } } faces = newCube; } public boolean done() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (faces[0][i][j][0] != Face.GREEN) { return false; } if (faces[i][2][j][1] != Face.YELLOW) { return false; } if (faces[i][j][2][2] != Face.RED) { return false; } if (faces[i][j][0][3] != Face.ORANGE) { return false; } if (faces[i][0][j][4] != Face.BLUE) { return false; } if (faces[2][i][j][5] != Face.WHITE) { return false; } } } return true; } } questo é il tipo Face: Codice:
public enum Face { GREEN, YELLOW, RED, ORANGE, BLUE, WHITE, INTERNAL, } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:50.