Java: cosa strana.

Lionel2
Salve, non date importanza alla traccia che devo ancora finirla ma testate questo pezzo di codice, e ditemi perché funziona male...

/*
 * Scrivere un programma che chiede all'utente di inserire un numero n intero 
 * positivo, gli chieda di inserire n parole, e per ciascuna di esse stampi a 
 * video il numero totale di caratteri che la compongono, il numero di vocali ed
 * il numero di consonanti. Al termine il programma deve stampare anche i valori
 * totali (caratteri, vocali e consonanti).
 */
package esercizi;

import java.util.Scanner;

/**
 *
 * @author Lionel
 */
public class ContaCaratteri {
    public static void main(String []args){
        int numeroIntero;
        int i;
        int j;
        String stringa;
        
        
        Scanner in = new Scanner(System.in);
        i = 1;
        do{
            System.out.println("Inserisci il numero di parole da inserire: ");
            numeroIntero = in.nextInt();
            i++;
        }
        while(numeroIntero<=0);
               
        j=0;
        do{
            System.out.println("Inserisci la stringa " +j +": ");
            stringa = in.nextLine();
            j++;
        }
        while(j<=numeroIntero);
        }
   }


Come output ho il seguente

Inserisci il numero di parole da inserire:
1
Inserisci la stringa 0:
Inserisci la stringa 1:

Perché compare due volte quella scritta? E' un errore mio o un problema di Java? Se è di Java come lo si risolve?
Ho usato due indici perché con uno era ancora peggio...non consentiva proprio di immettere le parole..
Grazie mille.

Risposte
apatriarca
Che scopo ha il contatore nel primo ciclo? Non viene usato all'interno del ciclo in nessun modo e neanche nel seguito. Nel secondo ciclo, è invece sbagliata la condizione del ciclo o il modo in cui viene inizializzato il contatore. Una successione di numeri che parte da 0 e termina con numeroIntero avrà numeroIntero+1 valori. Per cui è corretto il comportamento del tuo codice e sbagliata la tua logica. Inizializza j a 1 e ottieni il numero di iterazioni desiderate.

Lionel2
Allora sto rifacendo il programma da zero. E ho per il momento rifatto la prima parte e spero di averla resa più chiara. Fin qui non ci sono per il momento problemi.

/*
 * Scrivere un programma che chiede all'utente di inserire un numero n intero 
 * positivo, gli chieda di inserire n parole, e per ciascuna di esse stampi a 
 * video il numero totale di caratteri che la compongono, il numero di vocali ed
 * il numero di consonanti. Al termine il programma deve stampare anche i valori
 * totali (caratteri, vocali e consonanti).
 */
package esercizi;

import java.util.Scanner;

/**
 *
 * @author Lionel
 */
public class ContaCaratteri {
    public static void main(String []args){
        int numeroStringheDaInserire;
        int i;
        
        i = 0;
        Scanner in = new Scanner(System.in);
        do{
            System.out.println("Inserire un numero intero positivo che indichi il numero di stringhe che l'utente vorrà inserire sucessivamente: ");
            numeroStringheDaInserire = in.nextInt();
            if(numeroStringheDaInserire<=0){
                System.out.println("E' richiesto un numero intero positivo e maggiore di zero.");
            }
            i++;
        }
        while(numeroStringheDaInserire < 1);
        System.out.println("Il numero di stringhe che l'utente vuole immettere sono " +i +".");
    }
}.

Lionel2
Alla fine ho risolto così, credo sia un problema di java.

/*
 * Scrivere un programma che chiede all'utente di inserire un numero n intero 
 * positivo, gli chieda di inserire n parole, e per ciascuna di esse stampi a 
 * video il numero totale di caratteri che la compongono, il numero di vocali ed
 * il numero di consonanti. Al termine il programma deve stampare anche i valori
 * totali (caratteri, vocali e consonanti).
 */
package esercizi;

import java.util.Scanner;

/**
 *
 * @author Lionel
 */
public class ContaCaratteri {
    public static void main(String []args){
        int numeroStringheDaInserire;
        int i;
        String stringaImmessa;
        
        i = 0;
        Scanner in = new Scanner(System.in);
        do{
            System.out.println("Inserire un numero intero positivo che indichi il numero di stringhe che l'utente vorrà inserire sucessivamente: ");
            numeroStringheDaInserire = in.nextInt();
            if(numeroStringheDaInserire<=0){
                System.out.println("E' richiesto un numero intero positivo e maggiore di zero.");
            }
            i++;
        }
        while(numeroStringheDaInserire < 1);
        System.out.println("Il numero di stringhe che l'utente vuole immettere sono " +i +".");
        
        i = -1;
        do{
            System.out.println("Immetti la stringa " +(i+1) +":");
            stringaImmessa = in.nextLine();
            i++;
        }
        while(i<numeroStringheDaInserire);
    }
}


Mandandolo in esecuzione succede questo:

run:
Inserire un numero intero positivo che indichi il numero di stringhe che l'utente vorrà inserire sucessivamente:
3
Il numero di stringhe che l'utente vuole immettere sono 1.
Immetti la stringa 0: E qui vi è quel maledettissimo problema perché non mi fa immettere la stringa ma va direttamente a capo. Anche come poi mi hai detto di correggere.
Immetti la stringa 1:
Pino
Immetti la stringa 2:
Lionel
Immetti la stringa 3:
Ciao
BUILD SUCCESSFUL (total time: 16 seconds)

Lionel2
Ho trovato una soluzione più efficace, che ora posto nel caso qualcuno abbia lo stesso problema...

/*
* Scrivere un programma che chiede all'utente di inserire un numero n intero 
* positivo, gli chieda di inserire n parole, e per ciascuna di esse stampi a 
* video il numero totale di caratteri che la compongono, il numero di vocali ed
* il numero di consonanti. Al termine il programma deve stampare anche i valori
* totali (caratteri, vocali e consonanti).
*/
package esercizi;

import java.util.Scanner;

/**
*
* @author Lionel
*/
public class ContaCaratteri {
    public static void main(String []args){
        int numeroIntero;
        int i;
        int j;
        String stringa;
        
        
        Scanner in = new Scanner(System.in);
        i = 1;
        do{
            System.out.println("Inserisci il numero di parole da inserire: ");
            numeroIntero = in.nextInt();
            i++;
        }
        while(numeroIntero<=0);
        in.nextLine(); // Risolto Così
               
        j=0;
        do{
            System.out.println("Inserisci la stringa " +j +": ");
            stringa = in.nextLine();
            j++;
        }
        while(j<=numeroIntero);
        }
   }

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.