Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Java] Errore logico, ma dove?

    Questo è il mio primo programma in Java, esso consiste nel traformare una stringa scritta in morse nella cifra corrispondente.
    Il punto sarà rappresentato dal carattere "." e la linea dal carattere "_".
    La sintassi è corretta ma c'è un errore di logica.
    Il mio programma per capire che cifra è controlla il primo carattere della stringa con la funzione charAt(0) e se è il punto assegna alla variabile type il carattere "p" e se è linea, "l".

    In qualunque caso conta quanti punti ci sono nella stringa se il primo è un punto e quante linee se la prima è una linea con questa funzione:
    codice:
    for (i=0; i<=4; i++){
                                                    if (morse.charAt(i)=='x'){ //x puo essere il punto (.) o la linea (_)
                                                                            freq = freq++;
                                                                            }
                                                   }

    La stringa che gli ho dato io per verificare se il programma funziona è "...._" che sarebbe il numero 4.
    Quindi dovrebbe uscire 4 visto che alla fine c'è la funzione:
    codice:
    switch (type){
                case 'l': {
                              freq=freq+5;
                              System.out.println(freq);
                
                            break;
                          }
                case 'p': {
                               System.out.println(freq);
                          
                            break;
                          }
    Ma mi da' un errore su switch (type){ dicendo che la variabile dovrebbe essere inizializzata, ma così ho fatto!

    Riporto dunque il codice di tutto il programma:

    codice:
    import java.util.*;
    
    public class MorseTraductor{
    
         public static void main(){
            String morse;
            char type;
            int freq=0, i;
            morse = new String ("...._");
            switch (morse.charAt(0)){
                case '_': {
                           type='l';
                           for (i=0; i<=4; i++){
                                                    if (morse.charAt(i)=='_'){
                                                                            freq = freq++;
                                                                            }
                                                   }
                            break;
                           }
                case '.': {
                           type='p';
                           for (i=0; i<=4; i++){
                                                    if (morse.charAt(i)=='.'){
                                                                            freq = freq++;
                                                                            }
                                                   }
                            break;
                          }             
           }
           switch (type){
                case 'l': {
                              freq=freq+5;
                              System.out.println(freq);
                
                            break;
                          }
                case 'p': {
                               System.out.println(freq);
                          
                            break;
                          } 
              
           }
        
           
         
           
           
        }
    }
    Spero che qualcuno sia in grado di aiutarmi e di essermi spiegato bene.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    24
    nella classe MorseTraductor in realtà la variabile "type" non e' inizializzata, e' stata definita ma non inizializzata. quindi dovresti dargli un valore, anche carattere vuoto, quindi dovresti scrivere

    char type =''; oppure char type = "";

    ti da' l'errore in fase di compilazione in quanto non e' detto che l'algoritmo entri nel primo blocco switch. Se cosi' fosse, e l'algoritmo entra nel secondo blocco switch, nella valutazione della variabile "type" avresti un NullPointerException

    Cya

  3. #3
    Ho aggiunto all'inizio:

    String morse;
    char type=' ';
    int freq=0, i;
    morse = new String ("...._");


    Ma adesso nonostante la sintassi sia giusta mi da un output strano...
    0
    Ossia è come se freq sia rimasta a 0... ma logicamente mi sembra corretto il tutto, come mai?

  4. #4
    Fatto, risolto.
    Adesso vorrei aggiungere una cosa al programma.
    Come faccio ad aggiungere un altro case ma con la condizione "tutto cioè che non è linea o punto"?
    Basta il default?
    Grazie ancora per la pazienza

  5. #5
    Ecco il codice finale:

    codice:
    import java.util.*;
    import java.io.InputStreamReader;
    import java.io.BufferedReader ;
    import java.io.IOException;
    
    public class MorseTraductor{
    
         public static void main(){
            char type=' ';
            int freq=0, i;
            InputStreamReader reader = new InputStreamReader (System.in);
            BufferedReader myInput = new BufferedReader (reader);
            String morse= new String();
            try {
                morse = myInput.readLine();
            } catch (IOException e) {
                System.out.println ("Si è verificato un errore: " + e);
                System.exit(-1);
            }
    
            switch (morse.charAt(0)){
                case '_': {
                           type='l';
                           for (i=0; i<=4; i++){
                                                    if (morse.charAt(i)=='_'){
                                                                            freq++;
                                                                            }
                                                   }
                            break;
                           }
                case '.': {
                           type='p';
                           for (i=0; i<=4; i++){
                                                    if (morse.charAt(i)=='.'){
                                                                            freq++;
                                                                            }
                                                   }
                            break;
                          }    
                          
               default : {
                           type='o';
                           break;
                          }             
           }
           switch (type){
                case 'l': {
                              freq=freq+5;
                              System.out.println("Il codice morse " + morse + " equivale alla cifra " + freq);
                
                            break;
                          }
                case 'p': {
                               System.out.println("Il codice morse " + morse + " equivale alla cifra " + freq);
                          
                            break;
                          }
                case 'o': {
                               System.out.println("Sei un coglione: devi inserire una sequenza di punti e underscore per simulare il codice morse, toglie gli altri caratteri");
                          
                            break;
                          } 
              
           }
        
           
         
           
           
        }
    }
    Ma si presenta ovviamente un problema... con l'aggiunta delle righe di codice per l'imput dell'utente non mi va più il programma ossia, me lo compila dicendomi che non ci sono errori di sintassi ma quando faccio partire il programma non parte...

  6. #6

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    24
    si il default comprende "tutti gli altri casi"

    Cya

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.