Pagina 1 di 2

[JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 17:22
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");
     }
    }
}

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 17:49
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'.

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 18:34
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! :/

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 18:35
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".

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 18:40
da gabbro
Si era un compito per casa, quindi è per imparare, adesso dò un'occhiata al programma e vedo cosa hai cambiato di specifico :)

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 18:41
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

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 18:45
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

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 18:56
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

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 18:58
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 ?

Re: [JAVA] errore nel compilamento

Inviato: sab 14 gen 2012, 20:03
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.

Re: [JAVA] errore nel compilamento

Inviato: dom 15 gen 2012, 12:12
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 ? :/

Re: [JAVA] errore nel compilamento

Inviato: dom 15 gen 2012, 12:36
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;
  }
}

Re: [JAVA] errore nel compilamento

Inviato: dom 15 gen 2012, 12:43
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 .-.

Re: [JAVA] errore nel compilamento

Inviato: dom 15 gen 2012, 12:52
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

Re: [JAVA] errore nel compilamento

Inviato: dom 15 gen 2012, 13:07
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..