Repository 32bit  Forum
Repository 64bit  Wiki

[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.

[JAVA] errore nel compilamento

Messaggioda gabbro » sab gen 14, 2012 17:22

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");
     }
    }
}
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » sab gen 14, 2012 17:49

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'.
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » sab gen 14, 2012 18:34

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! :/
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » sab gen 14, 2012 18:35

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".
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » sab gen 14, 2012 18:40

Si era un compito per casa, quindi è per imparare, adesso dò un'occhiata al programma e vedo cosa hai cambiato di specifico :)
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » sab gen 14, 2012 18:41

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
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » sab gen 14, 2012 18:45

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » sab gen 14, 2012 18:56

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 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » sab gen 14, 2012 18:58

oddio che stupido, scusa ho capito solo adesso, e se l'and non si traduce con ritorna a e b quale operatore devo usare ?
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda robbybby » sab gen 14, 2012 20:03

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.
Avatar utente
robbybby
Linux 3.x
Linux 3.x
 
Messaggi: 1175
Iscritto il: sab dic 16, 2006 10:48
Località: Fra Trantor e Terminus
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » dom gen 15, 2012 12:12

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 ? :/
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda robbybby » dom gen 15, 2012 12:36

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;
  }
}
Avatar utente
robbybby
Linux 3.x
Linux 3.x
 
Messaggi: 1175
Iscritto il: sab dic 16, 2006 10:48
Località: Fra Trantor e Terminus
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » dom gen 15, 2012 12:43

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 .-.
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » dom gen 15, 2012 12:52

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » dom gen 15, 2012 13:07

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..
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron