PDA

View Full Version : [java] Parole appese


el922
25-01-2015, 14:45
ciao sto iniziando ad imparare java e non capisco dove cavolo sbaglio:
scrivi un programma che stampa delle parole in verticale idealmente appese a un filo. Ad esempio, se le parole sono:
uno due tre quattro cinque
deve essere stampato:


U D T Q C
N U R U I
O E E A N
T Q
T U
R E
O



Le parole vanno stampate in maiuscolo, separate l'una dall'altra da uno spazio.
Il mio programma è:

import java.util.Scanner;
import java.util.StringTokenizer;
class ParoleAppese{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("insersci le parole");
String f=sc.nextLine();
final int n=4;
String maiuscole[]=new String[n];
StringTokenizer st = new StringTokenizer(f," ");
int count=0;
while(st.hasMoreTokens()){
String numero1=st.nextToken();
String m=numero1.toUpperCase();
maiuscole[count]=m;
for(int riga=0;riga<=maiuscole[count].length();riga++){ //riga
for(int primalettera=0;primalettera<=riga;primalettera++){ //primalettera
System.out.print(maiuscole[count].charAt(primalettera) + " " );
}
}
System.out.println();
count++;
}
}
}


Perchè il programma mi genera un eccezione di tipo NullPointerException? ho sbagliato qualcosa nel ciclo for o nella logica del programma?

sottovento
25-01-2015, 18:57
Beh, un pochino. Hai implicitamente supposto che le parole abbiano tutte la stessa lunghezza, ma questo non e' vero.

Ad ogni modo, mi sembra che l'algoritmo debba essere rivisto.
L'esercizio e' semplice: devi stampare per righe, visto che non puoi tornare su.
Nella prima riga metterai la prima lettera di tutte le parole, nella seconda la seconda lettera e cosi' via.
Nel caso una parola sia piu' corta e non abbia lettere da scrivere in quella riga, ci metti uno spazio.
Smetti di incrementare le righe quando non c'e' piu' nulla da scrivere