Problema metodo static

di il
11 risposte

Problema metodo static

Class StringComparison {
public static void main(String[] args) {

long start=System.currentTimeMillis();
String x = "";
for(int i=0;i<150000;i++)
x+=i;
long end=System.currentTimeMillis();
System.out.println("Tempo di esecuzione testString() "+(end-start)+" millis.");

start=System.currentTimeMillis();
StringBuilder y = new StringBuilder("");
for(int i=0;i<150000;i++)
y.append(i);
end=System.currentTimeMillis();
System.out.println("Tempo di esecuzione testStringBuilder() "+(end-start)+" millis.");
}
}
ho fatto l'esercizio che ho allegato sopra, ora lo stesso dovrei farlo modificando la classe con due metodi statici
- testString()
-testStringBuilder()
che calcolano rispettivamente le prestazioni delle 2 classi.
Aggiungere una classe dimostrativa che, senza creare oggetti, chiami i 2 metodi a dimostrazione

e mi sono bloccato

11 Risposte

  • Re: Problema metodo static

    toto_83 ha scritto:


    ho fatto l'esercizio che ho allegato sopra
    Innanzitutto per benchmark di questo tipo NON devi usare System.currentTimeMillis() ma System.nanoTime().

    Il currentTimeMillis() si basa sulla data/ora di sistema che non va bene, perché può essere ad esempio "micro-aggiustata" dal SO se è connesso ad un server NTP. Il nanoTime() invece NON dipende dalla data/ora corrente ed è appropriato per test di questo tipo.

    toto_83 ha scritto:


    ora lo stesso dovrei farlo modificando la classe con due metodi statici
    - testString()
    -testStringBuilder()
    che calcolano rispettivamente le prestazioni delle 2 classi.
    Aggiungere una classe dimostrativa che, senza creare oggetti, chiami i 2 metodi a dimostrazione
    Ora nella classe StringComparison hai fatto tutto (i due 2 test) in un singolo metodo main().

    Semplicemente: in StringComparison separa i due test in due metodi separati, con i nomi che hai indicato (e senza mettere un main() ). Poi fai un'altra classe CON il main() che chiama quei due metodi di StringComparison.
    Così perlomeno è quanto si evince da quanto detto.
  • Re: Problema metodo static

    Class StringComparisonDemo {

    static testString(){
    long start=System.currentTimeMillis();
    String x = "";
    for(int i=0;i<150000;i++)
    x+=i;
    long end=System.currentTimeMillis();
    }
    static testStringBuilder(){
    start=System.currentTimeMillis();
    StringBuilder y = new StringBuilder("");
    for(int i=0;i<150000;i++)
    y.append(i);
    end=System.currentTimeMillis();
    }

    public static void main(String args[]) {


    System.out.println("Tempo di esecuzione testString()" + (end-start)+"millisec");
    System.out.println("Tempo di esecuzione testStringBuilder()" + (end-start)+"millisec");
    }
    }
    però non mi funziona
  • Re: Problema metodo static

    toto_83 ha scritto:


    però non mi funziona
    1) La dichiarazione dei metodi non è corretta, manca il tipo di ritorno.
    2) Nel main() NON stai invocando quei metodi e poi end/start sono locali ai metodi, quindi NON puoi usarli nel main. Hai 2 strade: i 2 metodi restituiscono già il tempo end-start oppure il "cronometro" lo fai nel main.
  • Re: Problema metodo static

    Nel main devo chiamare i due metodi senza creare oggetti
  • Re: Problema metodo static

    toto_83 ha scritto:


    Nel main devo chiamare i due metodi senza creare oggetti
    Certo ma come hai fatto "Tempo di esecuzione testString()" questa NON è una invocazione ... solo una stringa.
  • Re: Problema metodo static

    E pensare che la prima versione l'ho fatta in 2 minuti , ora mi sono bloccato
  • Re: Problema metodo static

    
        static String testString(){
            long start = System.nanoTime();
            String x = "";
            for(int i=0;i<150000;i++)
                x += i;
            return Long.toString((System.nanoTime() - start) / 1000000);
        }
    
    Come organizzare le classi e chiamare il metodo non si è capito. Prova a fare come ti ha detto andbin
  • Re: Problema metodo static

    Niente non mi compila
  • Re: Problema metodo static

    Stai aspettando il programma completo?

    Ovviamente al posto di (end-start) devi chiamare il metodo...
  • Re: Problema metodo static

    Nono ma sono alle priime armi e impiego un pò a capire come fare
  • Re: Problema metodo static

    
    System.out.println("Tempo di esecuzione testString() " + testString() + " millisec");
    
Devi accedere o registrarti per scrivere nel forum
11 risposte