Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108

    stampare in diagonale una Stringa

    Ragazzi devo risolvere questo piccolo esercizio ma non riesco mi potete dare una mano?
    Scrivere un programma che legge una parola e la stampa in maisucolo su diagonali
    parallele di 4 lettere ciascuna.

    Ad esempio, se la parola e' "programmazione" va stampato


    P R A N
    R A Z E
    O M I
    G M O

    Allora io riesco a far stampare la prima riga ma le altre no...è l'approccio esatto??

    // questo è la parte che dicevo dove s1 è la stringa
    System.out.print(s1.charAt(0));
    for(int i=1;i<s1.length();i++){
    if((i % 4) == 0)
    System.out.print(" " + s1.charAt(i));
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    scusate ma non è scritta in diagonale

    P R A N
    R A Z E
    O M I
    G M O

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    P   R    A    N
     R   A    Z    E
      O   M    I
       G   M    O
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Comunque no, non è tanto corretto nel senso che la povera console della JVM "non sa tornare indietr"o una volta mandato in stampa qualcosa, quindi conviene organizzarsi per tempo se si vuole scrivere direttamente a terminale oppure generare delle opportune String da concatenare per ovviare alle limitazioni di cui sopra.

    Quello che si fa è:
    - generare l'offset (ovvero il numero di riga, che guarda caso, corrisponde al numero di spazi bianchi da lasciare all'inizio di ciascuna riga)

    - prelevare un carattere ogni 4 per quella determinata riga, partendo da offset

    - andare a capo quando abbiamo terminato gli n caratteri per quella riga, ovvero quando l'indice del carattere da prelevare eccede l'indice massimo.

    una generalizzazione potrebbe essere:
    codice:
    public String blanks(int i) {
            String ret = "";
            for (int j = 0; j < i; j++) {
                ret += " ";
            }
            return ret;
        }
        
        public void diagonalText(String pivot, int lines) {               
            for (int i = 0; i < lines; i++) {
                System.out.print(blanks(i));
                for (int j = 0; j <= pivot.length()/lines; j++) {
                    if (j*lines + i < pivot.length()) {
                        System.out.print(pivot.charAt(j*lines+i)+blanks(lines-1));
                    }
                }
                System.out.println();
            } 
        }
    dove blanks è il metodo accessorio per generare gli spazi iniziali di offset e gli spazi tra i caratteri.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Grazie per avermi risposto...ma non ho capito alcune cose...

    lines sono il numero delle linee che vengono fuori dalla divisione della parola in 4 parti?

    pivot.length() che significa?

    Io praticamente ho la mia stringa di partenza (s) su cui dovrei fare sicuramente un ciclo per prelevale i singoli caratteri e poi una stringa (s1) della stessa lunghezza però con gli spazi bianchi.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    lines... : sì, ovvero quanti elementi ha ciascuna diagonale.

    pivot.lenght(): è la lunghezza della tua String (nel tuo brano di codice usavi s1.length(), non cambia niente).

    prova con: diagonalText("PROGRAMMAZIONE", 4)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Andrea allora funziona grazie...
    l'unica cosa è che devo fare tutto nel metodo main...

    il problema è il metodo blanks quando lo richiamo...

    codice:
    public static void main(String[] args) { 		
    Scanner in = new Scanner(System.in); 		
    System.out.print("parola : "); 		
    String s = in.nextLine(); 		
    String s1 = s.toUpperCase(); 		 		
    
    String a = ""; 		
    for (int j = 0; j < s1.length(); j++) {             
    a += "-";         
    } 		 		
    
    for(int i=0;i<4;i++){ 			
          System.out.print(blanks(i)); 			
          for(int j=0;j<=s1.length()/4;j++){ 				
             if(j*4 + i < s1.length()){
                System.out.print(s1.charAt(j*4+i)+blanks(4-1)); 				
             } 			  
          } 			
          System.out.println();			 		
    } 	
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    metodo brutale: dichiari blanks static e hai finito.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Ok fatto grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.