Newsgroup: it.comp.java
Titolo: semplice applicazione ricca di errori

Sto cercando di fare una semplice applicazione per console a scopo
didattico(sicuramente ci sarà un modo più semplice per farlo, ma Vi ricordo
lo scopo didattico), ho iniziato prendendo in considerazione la BlackJackApp
cap.10, pag. 97 di Java 2 Tutto&Oltre di Jamie Jaworski edizioni
Apogeo(politically correct ©):
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
	class LaRispostaesatta{
		public static void main (String args[]) throws IOException{
		 jesusliz liz = new jesusliz();
		 liz.play();
		}
	}
		class jesusliz{
			String head;
			BufferedReader tastiera;
			public jesusliz(){
				head("Head");
				tastiera = new BufferedReader(new InputStreamReader(System.in));}
			void play() throws IOException{
			char head[3];
			System.out.println("Qual'è il nome del primo album dei Jesus Lizard?");
			System.out.flush();
			String risposta = tastiera.readLine();
			try{
			ch = risposta.charAt(0, 1, 2, 3);}
			catch (StringIndexOfBoundsException exception){}
			if(tastiera = head){System.out.println("BravO");}
			else{System.out.println("Sbagliato");}
} }
mi da ben sette errori.
Qualcuno può spiegarmi come far capire a tastiera che la risposta giusta è
head?

Ho provato cosě:
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
	class LaRispostaesatta{
		public static void main (String args[]) throws IOException{
		String risposta = "head";
		BufferedReader tastiera = new BufferedReader(new
InputStreamReader(System.in));
		String newLine;
		while(((newLine = tastiera.readLine())!= null)){
		char ch = ' ' ;
		do{System.out.println("Il titolo del primo album dei Jesus Lizard");
		try{
		ch = newLine.charAt(3);}catch(StringIndexOutOfBoundsException exception){}
		if(newLine == risposta){System.out.println("Risposta esatta");}
        else{System.out.println("Risposta sbagliata");}}while(true);}}}
la classe viene compilata correttamente, ma , non stampa la domanda e quando
digiti la risposta mi da un loop infinito. Che devo fare, perchč non mi date
una mano?(che cavolo di ng č questo?Fuori i Santi!!!)





 digiti la risposta mi da un loop infinito. 
Per prima cosa, non devi scrivere:
newLine == risposta
ma invece
newLine.equals(risposta)
altrimenti l'uguaglianza non sara' mai verificata (== verifica se due
variabili puntano allo stesso oggetto, equals verifica che il contenuto
dei 2 oggetti puntati dalle 2 variabili sia lo stesso).
Per quanto riguarda la condizione di fine ciclo, tu vuoi finire quando
dai come input il solo carattere di new-line, giusto? Pero' in questo
caso la stringa letta non e' null, e' stringa vuota. Dovresti quindi
eseguire il controllo:
newLine.length() != 0
Ciao,
  Marina

(che cavolo di ng è questo? Fuori i Santi!!!)
Calma! Appena e' possibile qualcuno risponde. Non puoi pretendere di
avere la risposta dopo poche ore, abbiamo anche altre cose da fare ;-)
Ciao e buon Java
--   o  JOB - The Java Objects Builder - Try it, it's FREE!
    o o    
http://www.uno.it/utenti/tetractys/job.html
   o o o       TETRACTYS Software 
tetr...@uno.it
  o o o o        Leonardo Boselli 
bos...@uno.it

 Ho provato cosě:
[snip]
GECKOTAG, per quel che so di Java (non mi reputo un Santo o un Java
Evangelist... ancora! ;) ecco la correzione agli errori per entrambe le
versioni:
1)
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
class LaRispostaEsatta {
  public static void main (String args[]) throws IOException {
  jesusliz liz = new jesusliz();
  liz.play();
  }
}
class jesusliz {
  String head;
  BufferedReader tastiera;
  public jesusliz() {
    head = "Head";
    // oppure head = new String("Head");
    // certamente non head("Head");
    tastiera = new BufferedReader(new InputStreamReader(System.in));
  }
  void play() throws IOException {
    char head[];
    // oppure char[] head;
    // char head[3];
    // quindi manca
    head = new char[3]; // che serve per inizializzarlo
    System.out.println("Qual'č il nome del primo album dei Jesus
Lizard?");
    // Non serve System.out.flush(); perchč System.out č un PrintStream,
e non č buffered
    String risposta = tastiera.readLine();
     try {
       // manca la dichiarazione di tipo:
       char ch;
      // ch = risposta.charAt(0, 1, 2, 3);
      // Ad una prima occhiata vorresti recuperare i primi quattro
caratteri da tastiera
      // ma charAt richiede UN SOLO indice, e riporta UN SOLO carattere.
Inoltre hai dichiarato
      // head come un array di TRE caratteri, quindi il quarto non ci
starebbe comunque.
      // Dovresti dichiarare head come new char[4]; quindi
      // for (int n = 0; n < 4; n++)
      //    head[n] = risposta.charAt(n);
    } catch (StringIndexOutOfBoundsException exception) {}
    // e non catch (StringIndexOfBoundsException exception) {} !!! Manca
Out :-)
    // Tutto il pezzo direi che č concettualmente sbagliato!
    // Se proprio vuoi i primi quattro caratteri della stringa,
    if (risposta.length() >= 4)
      risposta = risposta.substring(0,4);
    // if (tastiera = head) {
    // No, se scrivi cosě tenti di assegnare ad un oggetto stringa un
oggetto di tipo
    // array di caratteri. Innanzitutto dovresti scrivere (tastiera ==
head), ma ancora
    // non va bene in quanto head č appunto un array (char[3] head
interno ha diciamo
    // 'il sopravvento' su String head). Se invece tu scrivessi
    // (tastiera == head.toString()) ci saresti quasi... senonchč in
questo modo il controllo
    // č sul riferimento - controlli se tastiera e head si riferiscono
allo stesso oggetto.
    // per una comparasione tra stringhe:
    if (tastiera.equals(head)) { // ma suggerirei anche equalsIgnoreCase
                                 // e comunque si deve rifare a String
head
      System.out.println("Bravo");
    }
    else {
    System.out.println("Sbagliato");
    }
    // Ad ogni modo per una unica istruzione non occorre l'inclusione
tra parentesi graffe
  }
}
2)
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
class LaRispostaEsatta {
  public static void main (String args[]) throws IOException{
    String risposta = "head";
    BufferedReader tastiera = new BufferedReader(new
InputStreamReader(System.in));
    String newLine;
    while (((newLine = tastiera.readLine())!= null)) {
    // Ho paura che newLine non possa essere null... anche se premi
invio e basta
    // riporta una stringa vuota, ma non un riferimento a null.
    // Non uscirai mai da questo ciclo
    // forse intendevi:
    // while ((!(newLine = tastiera.readLine()).equals(""))) {
    // al
      char ch = ' ';
      do {
        System.out.println("Il titolo del primo album dei Jesus
Lizard");
        try {
          ch = newLine.charAt(3);
          // Vedi sopra...
        } catch (StringIndexOutOfBoundsException exception) {}
        // Di nuovo, tutto il blocco č concettualmente sbagliato
        if (newLine.equals(risposta)) {
        // e non if (newLine == risposta), vedi sopra per la spiegazione
          System.out.println("Risposta esatta");
          break; //aggiunto, vedi la spiegazione piu' sotto
        }
        else {
          System.out.println("Risposta sbagliata");
        }
      } while(true);
      // certo che se fai un do while (true) non uscirai MAI nemmeno da
questo ciclo
      // a meno che tu non infili per esempio un break dopo aver scritto
'risposta esatta'.
    }
  }
}
In conclusione qui hai addirittura DUE cicli infiniti... non mi stupisco
che tu non ne esca.
Spero che i miei commenti ti possano essere di aiuto.
Ciao,
	Stefano