[JAVA] errore nel compilamento

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

[JAVA] errore nel compilamento

Messaggio da gabbro »

compilando un programma mi da questo errore ho controllato e ricontrollato il programma ma l'errore persiste sempre..
Una mano? :?

Codice: Seleziona tutto

bash-4.1# javac verificaData.java
verificaData.java:75: operator && cannot be applied to int,int
     return testAnno && testMese && testGiorno;
                     ^
1 error 
Il programma è questo:

Codice: Seleziona tutto

public class verificaData
{   
   public static int verificaData(int mese, int giorno, int anno)
   {   
     // dichiaro le variabili
     int testAnno;
     int testMese;
     int testGiorno;
     // inizializzo le variabili
     testAnno = 0;
     testMese = 0;
     testGiorno = 0;
     // controllo che l'anno sia valido
     if(anno >= 0 && anno< 10000)
     { 
       testAnno = 1;
     }
     else
     { 
       return 0;
     }
     // controllo che il mese sia valido
     if(mese > 0 && mese <= 12)
     {
       testMese = 1;
     }
     else
     { 
       return 0;
     }
     
     // controllo che il giorno sia valido
     if(giorno > 0 && giorno <= 31)
     {
      if(giorno ==29 && mese ==2)
      {
       if((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0)
       {
        testGiorno = 1;
       }
      }
      else if(giorno == 30)
      {
       if(mese == 2 )
       {
         testGiorno = 0;
       }
       else
       {
         testGiorno = 1;
       }
      }
     }
     else if(giorno ==31)
     {
       if((mese == 1) || ( mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12))
       { 
         testGiorno = 1;
       }
       else
       {
         testGiorno = 0;
       }
     }
     else
     {
       testGiorno = 1;
     }
     return testAnno && testMese && testGiorno;
    }
   public static void main(String[] va)
   {
     // dichiaro la variabile e la inizializzo
     int risultatoVerificaData = 0;
     risultatoVerificaData = verificaData( 1 ,10 ,2000 );
     risultatoVerificaData = verificaData( 6 ,31 ,2001 );
     risultatoVerificaData = verificaData( 2 ,29 ,1900 );
     risultatoVerificaData = verificaData( 2 ,29 ,1600 );
     risultatoVerificaData = verificaData( 2 ,29 ,2008 );
     risultatoVerificaData = verificaData( 10 ,36 ,1990 );
     risultatoVerificaData = verificaData( 13 ,10 ,2011 );
     risultatoVerificaData = verificaData( 2 ,30 ,2001 );
     risultatoVerificaData = verificaData( 12 ,31 ,2012 );
     System.out.println("La data inserita è\n");
     if( risultatoVerificaData == 0)
     {
      System.out.println("F\n");
     }
     else
     {
      System.out.println("V\n");
     }
    }
}

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [JAVA] errore nel compilamento

Messaggio da targzeta »

Ciao e benvenuto. Non entro nello specifico del programma, però mi sembra che il compilatore ti riporti chiaramente qual'è l'errore. Mi sembra che usi quelle variabili più come valori booleani che come interi, prova a dichiararle boolean e dovrebbe andare. Se invece vuoi usarli come interi allora devi anche dire se 'intero == valore && altro_intero == altro_valore'. Non è implicito il fatto che 'se intero' si riferisca a 'se intero != 0'.

Emanuele

P.S. Ti ho modificato il post. Quando scrivi codice o riporti output di programmi, usa il tag 'code' e non 'size' o 'color'.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

spina ha scritto:Non entro nello specifico del programma, però mi sembra che il compilatore ti riporti chiaramente qual'è l'errore. Mi sembra che usi quelle variabili più come valori booleani che come interi, prova a dichiararle boolean e dovrebbe andare. Se invece vuoi usarli come interi allora devi anche dire se 'intero == valore && altro_intero == altro_valore'. Non è implicito il fatto che 'se intero' si riferisca a 'se intero != 0'.
Innanzitutto ti ringrazio per la risposta, e ti dico subito che mi hai fatto capire l'errore ma non so come risolvere. Tu dici che uso quelle variabili come valori booleani e non come interi, il problema è che non so se devo usarle come intere o booleane.. anzi mi spiego meglio, non capisco cosa centri! l'errore che mi da è su
return testAnno && testMese && testGiorno; io dovrei far ritornare questi risultati alla funzione, e perhè dovrei dichiarare se le variabili sono intere o booleane, le variabili già le ho dichiarate intere! :/

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [JAVA] errore nel compilamento

Messaggio da targzeta »

Ho trovato un po' di tempo. Mi sono reso conto che cambiare i tipi delle variabili non è una cosa poi così semplice, devi fare molte modifiche al codice. Comunque, se il tuo intento è quello di creare una funzione che ritorna vero o falso, allora il codice corretto dovrebbe essere questo:

Codice: Seleziona tutto

public class verificaData
{   
   public static boolean verificaData(int mese, int giorno, int anno)
   {   
     // dichiaro le variabili
     boolean testAnno, testMese, testGiorno;

     // inizializzo le variabili
     testAnno = false;
     testMese = false;
     testGiorno = false;
     // controllo che l'anno sia valido
     if(anno >= 0 && anno< 10000)
     {
       testAnno = true;
     }
     else
     {
       return false;
     }
     // controllo che il mese sia valido
     if(mese > 0 && mese <= 12)
     {
       testMese = true;
     }
     else
     {
       return false;
     }
     
     // controllo che il giorno sia valido
     if(giorno > 0 && giorno <= 31)
     {
      if(giorno ==29 && mese ==2)
      {
       if((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0)
       {
        testGiorno = true;
       }
     }
      else if(giorno == 30)
      {
       if(mese == 2 )
       {
         testGiorno = false;
       }
       else
       {
         testGiorno = true;
       }
      }
     }
     else if(giorno ==31)
     {
       if((mese == 1) || ( mese == 3) || (mese == 5) || (mese == 7) || (mese == 
8) || (mese == 10) || (mese == 12))
       {
         testGiorno = true;
       }
       else
       {
         testGiorno = false;
       }
     }
     else
     {
       testGiorno = true;
     }
     return testAnno && testMese && testGiorno;
    }
   public static void main(String[] va)
   {
     // dichiaro la variabile e la inizializzo
     boolean risultatoVerificaData = false;
     risultatoVerificaData = verificaData( 1 ,10 ,2000 );
     risultatoVerificaData = verificaData( 6 ,31 ,2001 );
     risultatoVerificaData = verificaData( 2 ,29 ,1900 );
     risultatoVerificaData = verificaData( 2 ,29 ,1600 );
     risultatoVerificaData = verificaData( 2 ,29 ,2008 );
     risultatoVerificaData = verificaData( 10 ,36 ,1990 );
     risultatoVerificaData = verificaData( 13 ,10 ,2011 );
     risultatoVerificaData = verificaData( 2 ,30 ,2001 );
     risultatoVerificaData = verificaData( 12 ,31 ,2012 );
     System.out.println("La data inserita è\n");
     if( risultatoVerificaData == false)
     {
      System.out.println("F\n");
     }
     else
     {
      System.out.println("V\n");
     }
    }
}
Emanuele

P.S. Resta il fatto che se è un codice banale solo per imparare ok, altrimenti per fare quello che vuoi c'è sicuramente una strada più breve e più "corretta".
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

Si era un compito per casa, quindi è per imparare, adesso dò un'occhiata al programma e vedo cosa hai cambiato di specifico :)

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

spina ha scritto:

Codice: Seleziona tutto

public static [size=150][/size]boolean verificaData(int mese, int giorno, int anno)
   {   
     // dichiaro le variabili
     boolean testAnno, testMese, testGiorno;

     // inizializzo le variabili
     testAnno = false;
     testMese = false;
     testGiorno = false;
     // controllo che l'anno sia valido
     if(anno >= 0 && anno< 10000)
     {
       testAnno = true;
     }
     else
     {
       return false;
     }
     // controllo che il mese sia valido
     if(mese > 0 && mese <= 12)
     {
       testMese = true;
     }
     else
     {
       return false;
     }
     
     // controllo che il giorno sia valido
     if(giorno > 0 && giorno <= 31)
     {
      if(giorno ==29 && mese ==2)
      {
       if((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0)
       {
        testGiorno = true;
       }
     }
      else if(giorno == 30)
      {
       if(mese == 2 )
       {
         testGiorno = false;
       }
       else
       {
         testGiorno = true;
       }
      }
     }
     else if(giorno ==31)
     {
       if((mese == 1) || ( mese == 3) || (mese == 5) || (mese == 7) || (mese == 
8) || (mese == 10) || (mese == 12))
       {
         testGiorno = true;
       }
       else
       {
         testGiorno = false;
       }
     }
     else
     {
       testGiorno = true;
     }
     return testAnno && testMese && testGiorno;
    }
   public static void main(String[] va)
   {
     // dichiaro la variabile e la inizializzo
     boolean risultatoVerificaData = false;
     risultatoVerificaData = verificaData( 1 ,10 ,2000 );
     risultatoVerificaData = verificaData( 6 ,31 ,2001 );
     risultatoVerificaData = verificaData( 2 ,29 ,1900 );
     risultatoVerificaData = verificaData( 2 ,29 ,1600 );
     risultatoVerificaData = verificaData( 2 ,29 ,2008 );
     risultatoVerificaData = verificaData( 10 ,36 ,1990 );
     risultatoVerificaData = verificaData( 13 ,10 ,2011 );
     risultatoVerificaData = verificaData( 2 ,30 ,2001 );
     risultatoVerificaData = verificaData( 12 ,31 ,2012 );
     System.out.println("La data inserita è\n");
     if( risultatoVerificaData == false)
     {
      System.out.println("F\n");
     }
     else
     {
      System.out.println("V\n");
     }
    }
}
ancora non me lo hanno spiegato :P

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [JAVA] errore nel compilamento

Messaggio da targzeta »

gabbro ha scritto:...anzi mi spiego meglio, non capisco cosa centri! l'errore che mi da è su
return testAnno && testMese && testGiorno; io dovrei far ritornare questi risultati alla funzione, e perhè dovrei dichiarare se le variabili sono intere o booleane, le variabili già le ho dichiarate intere! :/
Scusa il messaggio precedente, abbiamo scritto contemporaneamente e ormai l'avevo scritto e non volevo eliminarlo.

Detto questo, se quello che vuoi è ritornare i tre valori allora hai proprio sbagliato tutto. E' un errore concettuale grave quello che hai fatto, occhio.

L'operatore && è un and logico e non un and di congiunzione. In pratica la "frase" 'return A && B' non si traduce con 'ritorna A e B' ma con 'ritorna (vero) se e solo se A è vero e B è vero'. Capisci quindi che si applica a valori booleani e non ad interi. Tu puoi anche dire 'return (A == 1) && (B==20)' solo perché le espressioni tra parentesi "ritornano" un booleano.

Ogni metodo, inoltre, ritorna un solo valore, poi questo valore può appartenere a qualsiasi tipo di oggetto specificato nel prototipo del metodo stesso. Il metodo 'int mioMetodo()' ritorna un solo intero e non una coppia o una terna di interi, altrimenti l'espressione 'a = mioMetodo()' risulterebbe ambigua, non ti pare? Per ritornare una coppia o una terna di valori allora devi ritornare o un oggetto wrapper oppure più semplicemente un array.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

L'operatore && è un and logico e non un and di congiunzione. In pratica la "frase" 'return A && B' non si traduce con 'ritorna A e B' ma con 'ritorna (vero) se e solo se A è vero e B è vero'. Capisci quindi che si applica a valori booleani e non ad interi. Tu puoi anche dire 'return (A == 1) && (B==20)' solo perché le espressioni tra parentesi "ritornano" un booleano.
non ho fatto neanche l'array, ma non risolvo mettendo al posto di && un and ? tipo return anno and mese and giorno? scusa sono su windows e visto che siamo online non vorrei perder tempo a entrate su linux

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

oddio che stupido, scusa ho capito solo adesso, e se l'and non si traduce con ritorna a e b quale operatore devo usare ?

Avatar utente
robbybby
Linux 4.x
Linux 4.x
Messaggi: 1223
Iscritto il: sab 16 dic 2006, 10:48
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5
Località: Fra Trantor e Terminus

Re: [JAVA] errore nel compilamento

Messaggio da robbybby »

In Java non puoi far ritornare a una funzione più di un valore. In altri linguaggi (per esempio in Lua) si può,ma in Java, in C, C++, ecc, no.

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

robbybby ha scritto:In Java non puoi far ritornare a una funzione più di un valore. In altri linguaggi (per esempio in Lua) si può,ma in Java, in C, C++, ecc, no.
Quindi un solo return con un solo valore, e se volessi far ritornare 3 valori ? :/

Avatar utente
robbybby
Linux 4.x
Linux 4.x
Messaggi: 1223
Iscritto il: sab 16 dic 2006, 10:48
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5
Località: Fra Trantor e Terminus

Re: [JAVA] errore nel compilamento

Messaggio da robbybby »

gabbro ha scritto:
robbybby ha scritto:In Java non puoi far ritornare a una funzione più di un valore. In altri linguaggi (per esempio in Lua) si può,ma in Java, in C, C++, ecc, no.
Quindi un solo return con un solo valore, e se volessi far ritornare 3 valori ? :/
Per esempio, nel modo più classico: passi un reference a una classe, alla funzione chiamata, e assegni i campi di questa classe:

Codice: Seleziona tutto

package TestArguments;

import java.util.*;

/**
 *
 * @author roby
 */
class Today
{
  int m_iDay;
  int m_iMonth;
  int m_iYear;
};

public class Main {

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args)
  {
  Today t = new Today();

    t.m_iDay = 0;
    t.m_iMonth = 0;
    t.m_iYear = 0;
    TestDay(t);
    PrintLnEy(t.m_iDay);
    PrintLnEy(t.m_iMonth);
    PrintLnEy(t.m_iYear);
  }

  static void TestDay(Today t)
  {
    t.m_iMonth = 1;
    t.m_iDay = 2;
    t.m_iYear = 2011;
  }
}

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

robbybby ha scritto:
gabbro ha scritto:
robbybby ha scritto:In Java non puoi far ritornare a una funzione più di un valore. In altri linguaggi (per esempio in Lua) si può,ma in Java, in C, C++, ecc, no.
Quindi un solo return con un solo valore, e se volessi far ritornare 3 valori ? :/
Per esempio, nel modo più classico: passi un reference a una classe, alla funzione chiamata, e assegni i campi di questa classe:

Codice: Seleziona tutto

package TestArguments;

import java.util.*;

/**
 *
 * @author roby
 */
class Today
{
  int m_iDay;
  int m_iMonth;
  int m_iYear;
};

public class Main {

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args)
  {
  Today t = new Today();

    t.m_iDay = 0;
    t.m_iMonth = 0;
    t.m_iYear = 0;
    TestDay(t);
    PrintLnEy(t.m_iDay);
    PrintLnEy(t.m_iMonth);
    PrintLnEy(t.m_iYear);
  }

  static void TestDay(Today t)
  {
    t.m_iMonth = 1;
    t.m_iDay = 2;
    t.m_iYear = 2011;
  }
}
madonnina non lo fatta sta robba ancora .-.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [JAVA] errore nel compilamento

Messaggio da targzeta »

gabbro ha scritto:
robbybby ha scritto:In Java non puoi far ritornare a una funzione più di un valore. In altri linguaggi (per esempio in Lua) si può,ma in Java, in C, C++, ecc, no.
Quindi un solo return con un solo valore, e se volessi far ritornare 3 valori ? :/
Bhé, se i metodi ritornano un solo valore, mi sembra impossibile ritornare 3 valori, non ti pare? Devi per forza di cose racchiudere tutto ciò che vuoi passare in un unico oggetto, che sia la classe Today che ti ha mostrato robbybby, oppure che sua un array oppure qualcos'altro.

Comunque, secondo me, dall'esercizio che ti hanno dato, si presume che tu debba dire solo Vero/Falso, che è un unico valore booleano. Se non avete fatto i booleani allora usa gli interi, però devi fare dei controlli tipo 'return (testGiorno == 1) && (testMese == 1) && ...'.

Se ho capito male cerca di spiegare in parole povere cosa deve fare il metodo (perché statico?) verificaData.
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

Ti avevo già inviato un messaggio privato ma ora mi spiego meglio con gli altri, la consegna del problema è questa:

"Realizzare una funzione per controllare la validità di una data.
I parametri formali devono essere tre: giorno,mese,anno
tutti numerici interi e l'anno a quattro cifre.
Il ritorno deve essere vero o falso, sotto forma del numero 1/0
oppure del carattere v/f (a scelta). La funzione deve essere testata dal "main" per i seguenti valori:
10/01/200, 31/06/2001 ecc... "

Devo fare una funzione, con parametri giorno,mese e anno che restituisca v se la data inserita nel main è vera e f se la data inserita nel main è falsa..

non so se mi sono spiegato..

Rispondi