PDA

View Full Version : [JAVA]Iterare i caratteri di una stringa ed inserirli in un array bidimensionale


EnZiMa
19-06-2008, 01:17
Sto sviluppando il gioco "ruota della fortuna", ho problemi nell'inserimento della frase misteriosa nel tabellone.
Il mio tabellone è un array bidimensionale di char, con dimensioni 4x12. Sono riuscito tramite l'interfaccia CharacterIterator ad iterare la frase ed inserirla nell'array, ma sorge il problema dello spezzamento delle parole...come posso risolverlo? vorrei anche posizionare le parole della frase al centro del tabellone se la frase lo permette.

private void inserisciFrase() {

if (fraseMisteriosa.length() <= LIMITE) {

CharacterIterator it = new StringCharacterIterator(" "+fraseMisteriosa.getTesto());
for (char ch=it.first(); ch != CharacterIterator.DONE; ch=it.next()) {


for (int r = 0; r < tabellone.length; r++) {
for (int c = 0; c < tabellone[r].length; c++) {

if(it.current()!= CharacterIterator.DONE){
tabellone[r][c]=it.next();
}

}
}
}
}

else {
System.out
.println("Errore : non sono ammesse frasi che hanno più di 48 catteri");
}

}

la frase misteriosa è

Questo è solo un esempio

l'output prodotto

|Q| |u| |e| |s| |t| |o| | | |è| | | |s| |o| |l|
|o| | | |u| |n| | | |e| |s| |e| |m| |p| |i| |o|
|\uffff| |.| |.| |.| |.| |.| |.| |.| |.| |.| |.| |.|
|.| |.| |.| |.| |.| |.| |.| |.| |.| |.| |.| |.|


inoltre CharacterIterator mi aggiunge un carattere strano nell'array.

Grazie! :)

wizard_at
19-06-2008, 10:02
io farei cosi':

ho la mia frase in una String.
char ch[] =String.toCharArray();

/* public char[] toCharArray() */

poi suddivido ch[] nei vari pezzetti con un bel ciclo for.

EnZiMa
19-06-2008, 15:11
ho risolto così:

/**
* Inserisce una frase nel tabellone
*/
private void inserisciFrase() {

if (fraseMisteriosa.length() <= LIMITE) {

caratteriFrase= fraseMisteriosa.getTesto().toCharArray();

int count=0;

// scorro l'array [][] tabellone
for (int r = 0; r < tabellone.length; r++) {
for (int c = 0; c < tabellone[r].length; c++) {


// inserisco ogni carattere nel tabellone
if(count<caratteriFrase.length)
tabellone[r][c]=caratteriFrase[count++];

}
}
}
else
System.out.println("Errore : non sono ammesse frasi che hanno più di 48 catteri");

}

Output:

|Q|u|e|s|t|o| |è| |s|o|l|
|o| |u|n| |e|s|e|m|p|i|o|
| | | | | | | | | | | | |
| | | | | | | | | | | | |

ma rimane sempre il problema dello spezzamento delle parole :mc: ...come posso risolverlo? suggerimenti?

wizard_at
19-06-2008, 18:26
allora....beh semplice:

unalinea e' lunga 12. guardi al carattere il cosa c'e'. se c'e' uno spazio va tuto bene se c'e' un carattere torni indietro fino a quando non trovi uno spazio poi copi dall'inizio al punto trovato.
per la seconda linea fai punto_trovato+12) e fai la stessa cosa.

EnZiMa
20-06-2008, 00:45
allora....beh semplice:

unalinea e' lunga 12. guardi al carattere il cosa c'e'. se c'e' uno spazio va tuto bene se c'e' un carattere torni indietro fino a quando non trovi uno spazio poi copi dall'inizio al punto trovato.
per la seconda linea fai punto_trovato+12) e fai la stessa cosa.

devo far partire il 2 for dalla fine? non si attaccano le parole poi? :wtf: :what:

wizard_at
20-06-2008, 13:01
devo far partire il 2 for dalla fine? non si attaccano le parole poi? :wtf: :what:

ma tanto vai a capo!

EnZiMa
23-06-2008, 00:31
non ci riesco help me!!! :mc: :mc: :mc:

wizard_at
28-06-2008, 09:13
ciao,
sono stato via tutta la settimana e non ho potuto rispondere.


class fioco{
public static void main(String args[]){

String fraseMisteriosa = "Questa e' solo una prova"; //metto una frase, anche se e' il limite toglie la parte finale

char caratteriFrase[]= new char [fraseMisteriosa.length()]; //creo un char

caratteriFrase = fraseMisteriosa.toCharArray(); //converto la stringa


int altezza=3, lunghezza = 12; //mi imposto altrezza e larchezza della tabella
char tabella [][] = new char[altezza][lunghezza];//mi creo una tabella
//riempio di spazi
for (int i =0; i<3; i++){
for (int j=0; j<12; j++){
tabella[i][j]=' ';
}
}

//mette nella tabella....no so perche' ma funziona
int start=0, stop=0;
for (int rig=0; rig<altezza; rig++){
int pos=0;
boolean trov=false;
do{
try{if(caratteriFrase[start+lunghezza-pos]==' '){
stop=start+lunghezza-pos;
int a=0;
for (int col=start; col<stop ; col++){
tabella [rig][a]= caratteriFrase[col];
a++;
}
trov=true;
}else{
pos++;
}
}catch(ArrayIndexOutOfBoundsException ae){
int a=0;
for (int col=start; col<caratteriFrase.length ; col++){
tabella [rig][a]= caratteriFrase[col];
a++;
}
trov=true;
rig=altezza;
}
}while (trov==false);
start=stop+1;
}

//Stampa tabella
for (int i=0; i<altezza; i++) {
for (int j=0; j<lunghezza; j++){
System.out.print(tabella[i][j]);
}
System.out.println();
}

}
}


spero vada bene.
ciao