Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Esercizio su cicli

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110

    Esercizio su cicli

    Ciao a tutti,
    avrei da scrivere un frammento di codice che legge le parole digitate da tastiera finché non si digita la parola "fine".
    Per ciascuna parola, tranne "fine", si deve riportare se il primo carattere della parola è uguale all'ultimo.

    Si deve utilizzare
    - while
    - do-while

    Ho impostato una base del codice in questo modo:
    codice:
    import java.util.Scanner;
    
    
    public class Cicli {
    
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            String parola;
            Scanner tastiera = new Scanner(System.in);
            
            do
            {
                System.out.println("Inserisci una parola");
                parola = tastiera.nextLine();
            } while (!parola.equals("fine");
            
        }
    
    
    }
    Per il successivo confronto dei caratteri della parola non so come scorrere i caratteri della parola stessa per confrontare il primo e l'ultimo. Io so che la parola digitata va nella variabile string "parola" ma come faccio poi a scorrere all'interno della stessa?

    Grazie anticipatamente
    Ultima modifica di Sevenis; 25-11-2016 a 18:29

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    ma come faccio poi a scorrere all'interno della stessa?
    I char all'interno di una stringa sono accessibili tramite il metodo charAt(int indice) di String. La lunghezza della stringa (numero di char presenti nella stringa) è fornita dal length() sempre di String.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    I char all'interno di una stringa sono accessibili tramite il metodo charAt(int indice) di String. La lunghezza della stringa (numero di char presenti nella stringa) è fornita dal length() sempre di String.
    Io ho provato a fare così ma mi da errore nell'inizializzazione del ciclo if:

    codice:
      
    int lunghezzaparola = parola.length();
    
    if((parola.charAt(0)).equals(parola.charAt(lunghezzaparola)))
                  {
                    System.out.println("La prima e l'ultima lettera della parola coincidono!");
                  }
                  else
                  {
                    System.out.println("La prima e l'ultima lettera della parola NON coincidono!");
                  }
    Cosa sbaglio?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    if è un'istruzione non un ciclo.
    charAt() restituisce un valore di tipo char (primitivo), che non è un oggetto e, di conseguenza, non possiede alcun metodo... quindi non ha nessun equals(). I tipi primitivi si confrontano con ==

    codice:
    char carattere = ...;
    if (carattere == 'A') {
       ...
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    E io aggiungo ....

    if((parola.charAt(0)).equals(parola.charAt(lunghezzaparola)))

    NON va bene. L'indice nelle stringhe (come negli array) parte da 0. Quindi se una stringa è lunga 10 gli indici validi vanno da 0 a 9 inclusi ... ma NON 10.
    Ultima modifica di andbin; 25-11-2016 a 19:33
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    E io aggiungo ....

    if((parola.charAt(0)).equals(parola.charAt(lunghezzaparola)))

    NON va bene. L'indice nelle stringhe (come negli array) parte da 0. Quindi se una stringa è lunga 10 gli indici validi vanno da 0 a 9 inclusi ... ma NON 10.
    Grazie!
    Ho risolto così:

    codice:
    		do
    		{
    			System.out.println("Inserisci una parola");
    			parola = tastiera.nextLine();
    			
    			int ultimocarattere = parola.length() -1;
    				  
    				  if((parola.charAt(0)) == (parola.charAt(ultimocarattere)))
    				  {
    					 System.out.println("La prima e l'ultima lettera della parola coincidono!");
    				  }
    				  else
    				  {
    					 System.out.println("La prima e l'ultima lettera della parola NON coincidono!");
    				  }
    					
    		} while (!parola.equals("fine"));

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    codice:
    parola = tastiera.nextLine();
    			
    int ultimocarattere = parola.length() -1;
    				  
    if((parola.charAt(0)) == (parola.charAt(ultimocarattere)))
    Corretto. Ti segnalo solo due cose, per completezza:

    1) La tua implementazione non funziona se viene inserita una riga "vuota", ovvero senza alcun carattere. Questo perché se la stringa è vuota non esistono indici validi .. nemmeno l'indice 0. Quindi qualunque charAt lancerebbe un bel StringIndexOutOfBoundsException. Questa è una cosa che se vuoi puoi verificare prima di fare altro.

    2) In if((parola.charAt(0)) == (parola.charAt(ultimocarattere)))

    le parentesi attorno ai due operandi di == non sono strettamente necessarie. Non fanno male e in questo caso non cambiano il senso della espressione ma appunto sono superflue.
    In espressioni più complesse possono essere utili, anche se magari superflue, per chiarire il senso o rendere più leggibile il codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.