|
|||||||
|
|
|
![]() |
|
|
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
) dimensioni ![]() 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: 2782
|
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 14: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: 10:24.










) dimensioni 









