Nello svolgere un esercizio per l'esame di programmazione 1 non riesco a farlo funzionare, qualcuno riesce ad aiutarmi? questo è il testo dell'esercizio.
Scrivere un programma Java che chieda all’utente di inserire una frase tramite tastiera e,
utilizzando gli opportuni metodi sulle stringhe, esegua le seguenti operazioni:
? se la frase contiene 2 o più parole:
? stampi a video che la frase contiene due o più parole;
? stampi a video la prima parola e la sua lunghezza;
? stampi a video l’ultima parola e la sua lunghezza;
? se la frase contiene una sola parola:
? stampi a video che la frase contiene una sola parola;
? stampi a video la parola e la sua lunghezza;
? se la frase inserita è vuota:
? stampi a video che la frase non contiene parole.
Per semplicità, si assuma che la frase non inizi e non finisca con degli spazi, e che ogni parola sia
separata dalla successiva usando un solo spazio. Grazie a questa assunzione, le parole sono
individuabili semplicemente cercando gli spazi.
io l'ho scritto così il codice:
import java.util.Scanner;
public class ese3_2 {
public static void main(String[] args) {
Scanner tastiera = new Scanner (System.in);
System.out.println("Scrivi una frase a tuo piacere:");
String frase = tastiera.nextLine();
int spazio1 = frase.indexOf(" ");
String parola1 = frase.substring(0 , spazio1 );
String restoDellaFrase = frase.substring(++spazio1);
int spazio2 = restoDellaFrase.indexOf(" ");
String parola2 = restoDellaFrase.substring(0 , spazio2);
if (parola1 == null && parola2 == null){
System.out.println("la frase non contiene parole");
System.exit(0);
}
else if (parola2==null){
System.out.println("la frase contiene una parola: ");
int lunghezzaP1 = parola1.length();
System.out.println("la parola " + parola1 + " e' lunga " + lunghezzaP1 + " lettere.");
}
else {
System.out.println("la frase contiene due parole: ");
int lunghezzaP1 = parola1.length();
System.out.println("la parola " + parola1 + " e' lunga " + lunghezzaP1 + " lettere.");
int lunghezzaP2 = parola2.length();
System.out.println("la parola " + parola2 + " e' lunga " + lunghezzaP2 + " lettere.");
}
}
}
per compilare compila ma poi quando inserisco una frase composta da ua sola parola o da zero mi esce questa cosa qua e non capisco come risolvere il problema
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 4
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4601)
at java.base/java.lang.String.substring(String.java:2704)
at ese3_2.main(ese3_2.java:11)
alcuni dati cambiano in base alla parola che scrivo, qua per esempio avevo scritto "ciao".