Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4

    Problema con metodo

    Ciao a tutti. Ho un problema col metodo compareTo della seguente classe.
    Non riesco ad interpretare bene la richiesta.
    Se qualcuno può darmi un idea...
    Grazie a chi risponderà
    ----------------------------------------------------------------------------------------
    public class SimpleID3 {

    private String artist;
    private String album;
    private int year;

    public SimpleID3(String artist, String album, int year) {
    this.artist = artist;
    this.album = album;
    this.year = year;
    }

    /*
    ** Il seguente metodo restituisce -1 se this e` minore
    ** di id3 passato come parametro, 0 se uguale e 1 se
    ** maggiore. this e` minore di id3 se l'anno di pub-
    ** blicazione di this e` minore, maggiore se l'anno e`
    ** maggiore. Se l'anno e` uguale allora this e` minore
    ** uguale o maggiore a seconda se il nome dell'artista
    ** e` minore, uguale o maggiore (lessicograficamente).
    */
    public int compareTo(SimpleID3 id3) {

    ///svolgere

    }

    public String getArtist() {
    return artist;
    }

    public String getAlbum() {
    return album;
    }

    public int getYear() {
    return year;
    }

    public String toString() {
    String temp = "";
    temp += "Artist: " + artist + "\n";
    temp += "Album: " + album + "\n";
    temp += "Year: " + year;
    return temp;
    }

    }

    ---------------------------------------------------------------------------------------

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013

    Re: Problema con metodo

    E' uno di quei quesiti già risposti:basta accendere il cervello e leggere.
    codice:
    /*
        ** Il seguente metodo restituisce -1 se this e` minore
        ** di id3 passato come parametro, 0 se uguale  e  1 se
        ** maggiore. this e` minore di id3 se l'anno  di  pub-
        ** blicazione di this e` minore, maggiore se l'anno e`
        ** maggiore. Se l'anno e` uguale allora this e` minore
        ** uguale o maggiore a seconda se il nome dell'artista
        ** e` minore, uguale o maggiore (lessicograficamente).
        */
        public int compareTo(SimpleID3 id3) {
          //comparazione per anno
          return (this.getYear() > id3.getYear() ? 1 : (this.getYear() < id3.getYear() ? -1 : (this.getArtist() > id3.getArtist() ? 1 : (this.getArtist() < id3.getArtist() ? - 1 : 0)));
    
    	///svolgere
    
        }
    spero di non aver dimenticato qualche parentesi
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Problema con metodo

    Originariamente inviato da Andrea1979
    spero di non aver dimenticato qualche parentesi
    Ehm ... il fatto è che getArtist() ritorna un String ... e non puoi confrontarlo con < > ecc...

    Così!
    codice:
    public int compareTo (SimpleID3 id3) {
        if (getYear() < id3.getYear())
            return -1;
        else if (getYear() > id3.getYear())
            return +1;
    
        return getArtist().compareTo (id3.getArtist());
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013

    Re: Re: Re: Problema con metodo

    Originariamente inviato da andbin
    Ehm ... il fatto è che getArtist() ritorna un String ... e non puoi confrontarlo con < > ecc...

    Così!
    codice:
    public int compareTo (SimpleID3 id3) {
        if (getYear() < id3.getYear())
            return -1;
        else if (getYear() > id3.getYear())
            return +1;
    
        return getArtist().compareTo (id3.getArtist());
    }
    ooops vero:

    codice:
    public int compareTo(SimpleID3 id3) {
            return (this.getYear() > id3.getYear() ? 1 : 
                (this.getYear() < id3.getYear() ? -1 : 
                    (this.getArtist().compareTo(id3.getArtist()) == 0 ? 0 : 
                        Math.abs(this.getArtist().compareTo(id3.getArtist()))/this.getArtist().compareTo(id3.getArtist()))));
        }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Problema con metodo

    Originariamente inviato da Andrea1979
    ooops vero:

    codice:
    public int compareTo(SimpleID3 id3) {
            return (this.getYear() > id3.getYear() ? 1 : 
                (this.getYear() < id3.getYear() ? -1 : 
                    (this.getArtist().compareTo(id3.getArtist()) == 0 ? 0 : 
                        Math.abs(this.getArtist().compareTo(id3.getArtist()))/this.getArtist().compareTo(id3.getArtist()))));
        }
    Eh???? VVoVe:
    Perché tutto 'sto casino con Math.abs ecc...??? Ma scherziamo?

    Guarda che se l'anno è uguale, basta far ritornare esattamente il risultato del compareTo sull'artista!

    Il mio codice era già funzionante e chiarissimo .... se proprio si volesse compattare un po' si potrebbe fare:
    codice:
    public int compareTo (SimpleID3 id3) {
        return getYear() < id3.getYear() ? -1 : getYear() > id3.getYear() ? +1 :
               getArtist().compareTo (id3.getArtist());
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    compareTo su stringa ritorna un positivo (non è detto che sia 1) o un negativo (non è detto che sia -1). L'ho semplicemente normalizzato.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Andrea1979
    compareTo su stringa ritorna un positivo (non è detto che sia 1) o un negativo (non è detto che sia -1). L'ho semplicemente normalizzato.
    E cosa cambia???
    La specifica di compareTo dice:
    Returns:
    a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.


    Non dice che devi per forza far ritornare esattamente +1 o -1.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ma la specifica dell'esercizio sì. solo -1 0 o 1
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Andrea1979
    ma la specifica dell'esercizio sì. solo -1 0 o 1
    Ah ok ... rileggendo il testo iniziale in effetti dice -1 o +1. Quindi in quel senso è corretto "normalizzare" il risultato.

    Io comunque, personalmente, non avrei di certo usato divisioni o Math.abs!!!

    Bastava fare:
    codice:
    int r = getArtist().compareTo (id3.getArtist());
    return r < 0 ? -1 : r > 0 ? +1 : 0;
    Con Java 5 in sù, si può anche fare in modo abbastanza "pulito" con:

    codice:
    return Integer.signum (getArtist().compareTo (id3.getArtist()));
    Comunque chi ha scritto quella specifica dell'esercizio, dubito che conosca l'interfaccia Comparable e le sue specifiche ..... non mi stupirei più di tanto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non posso che darti ragione... d'altra parte chiunque sia passato per un corso di informatica di una qualsiasi facoltà di ingegneria o simile ti potrà confermare che la maggior parte dei docenti che dirigono tali insegnamenti sono in verità riciclati (sarebbero docenti di tutt'altra materia) e fondamentalmente non hanno molta voglia di documentarsi sulle nuove tecnologie e/o specifiche.

    Mi piaceva farlo tutto su una riga
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.