Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-08-2006, 10:06   #1
aduri
Member
 
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
(Java) Problema uso compareTo()

Salve a tutti,

Il testo del problema posto dal prof. e' il seguente:

2. Sviluppare una classe Process che descriva un processo. Definire tre campi: un intero che
identifica il processo (pid), una stringa per il nome del processo e un intero per
l’occupazione di memoria. Definire il costruttore della classe e il metodo toString().
Implementare l’interfaccia Comparable: il confronto è fatto sulla memoria utilizzata.

Io ho sviluppato questo codice che mi da errore quando uso compareTo().
Mi ci sto picchiando da parecchio ma non riesco a capire dove sbaglio.

Codice:
import java.util.*;
import java.lang.*;

class Process implements Comparable
{
int pid;
String nome;
int memoria;

public Process(int pid, String nome, int memoria) //costruttore
{
this.pid= pid; 
this.nome = nome;
this.memoria = memoria;
}

public void StampaDettagli()
{
System.out.println("Processo "+pid+" Nome " + nome + " Memoria " + memoria);
}
public String toString()
{
return nome + " " + pid+" "+memoria;
}
public int compareTo(Object o){
Process tmp = (Process) o;
return memoria.compareTo(tmp.memoria);
}
// private int pid;
// private String nome;
// private int memoria;
}


public class UsoProcess
{
public static void main(String args[])
{
Process[] proc = new Process[3];

proc[0] = new Process(2,"integer", 1500);
proc[1] = new Process(6,"calc", 2500);
proc[2] = new Process(4,"sum", 2500);

System.out.println("===================");
System.out.println("Situazione processi");
System.out.println(" ");

for (int i = 0; i < 3; i++)
{
proc[i].StampaDettagli();
}

System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
}
}
Grazie per l'aiuto
aduri è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 10:21   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da aduri
Io ho sviluppato questo codice che mi da errore quando uso compareTo().
memoria è di tipo int ... non un oggetto, non ha metodi!!

return memoria > tmp.memoria ? +1 : memoria < tmp.memoria ? -1 : 0;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 12:10   #3
aduri
Member
 
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
Grazie,
mi sei stato di grande aiuto.

Come al solito.
aduri è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 12:35   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da aduri
Grazie,
Prego.

Ma ... il codice sopra è ancora incompleto, vero?? Perché non mi sembra che compareTo venga usato.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 16:15   #5
aduri
Member
 
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
Dal testo del professore non riesco bene ad interpretare quello che vuole.
Dice pero' che il confronto va fatto sulla memoria e nell'esercizio successivo
fa diverse richieste che ancora non ho capito come impostare.
E' l'ultimo esercizio ma, per le mie scarse capacita', il piu' complicato.

Ho anche implementato con successo (dopo parecchi rifacimenti) una classe SortLinkedList che allego per completezza e che deve essere richiamata .

Codice:
import java.util.*;
public class SortedLinkedList extends LinkedList
{
private static int elementi;
public static void main ( String []args )
    {
       if(args.length > 0)
          elementi = Integer.parseInt(args[0]);
       else
         elementi = 21;
         System.out.println( "Prova su " + elementi + "elementi." );
         SortedLinkedList l = new SortedLinkedList();
         // riempi la lista di numeri a caso tra -30 e +30
          ListIterator it_aggiunta = l.listIterator();
   Random generatore=new Random();
       for ( int i = 0; i < elementi; i++ )
       {
   int segno=generatore.nextInt(2);// 0 o 1
   int n=generatore.nextInt(31);
   if(segno==0)
   l.add(new Integer(- n ));
   else
   l.add(new Integer(n));
       }
       // stampa tutti i valori
       System.out.println( "Collezione completa:" );
       stampaCollezione( l );
       }
    private static void stampaCollezione
                                   ( Collection c )
    {
       Iterator i = c.iterator();
       while ( i.hasNext() )
       {
          System.out.println( i.next() );
       }
    }
    @Override
 public boolean add(Object o){
  Comparable c=(Comparable)o;//bisogna usare il cast a Comparable
  ListIterator it=listIterator();
  Comparable c2=null;
  if(it.hasNext())
   c2=(Comparable)it.next();
  else{
   it.add(c);
   return true;
  }
  while(it.hasNext() && c2.compareTo(c)>0) //<0 x ordine crescente
     c2=(Comparable)it.next();
  //uscito dal while ho raggiunto la posizione di inserimento perchè il compareTo() non da più <0
  //ora posso usare per inserire in questa posizione il metodo add di ListIterator ma bisognerebbe
  //tornare indietro di una posizione per essere sicuri che l'inserimento sia in ordine se il compareTo() >0
  if(c2.compareTo(c)<0)//>0 x ordine crescente
  it.previous();
  it.add(c);
  return true;
 }
}
Il testo originale del prof. x l'ultimo es. e' mil seguente:

3. Scrivere una classe (che contiene il main()) in cui creare un oggetto di tipo
SortedLinkedList, lista di oggetti Process. La sequenza di processi “in ingresso al sistema” è contenuta nel file processes.txt: ogni riga contiene i dati di un processo, cioè il pid, il nome e la memoria occupata. Eseguire le seguenti operazioni:
• Leggere una riga del file ed inserire il processo nella lista.
• Se la quantità di memoria utilizzata da tutti i processi supera un valore di soglia
(100000) eliminare dalla lista il processo che in quel momento occupa più memoria
(utilizzare gli iteratori, oggetti Iterator).
• Salvare su file il numero di processi presenti nel sistema e la quantità di memoria
utilizzata da tutti i processi in ogni istante (“ad ogni lettura di una riga”).
Fare i grafici dell’occupazione di memoria e del numero di processi (in ogni istante).
Commentare.
Valutare il costo computazionale per mantenere la lista ordinata e per eliminare il processo
che occupa più memoria.

Scusa per la lungaggine
aduri è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 17:06   #6
Andrea16v
Senior Member
 
L'Avatar di Andrea16v
 
Iscritto dal: Mar 2003
Messaggi: 3852
Quote:
Originariamente inviato da andbin
memoria è di tipo int ... non un oggetto, non ha metodi!!

return memoria > tmp.memoria ? +1 : memoria < tmp.memoria ? -1 : 0;
Non avevo mai visto in un compareTo() un'implementazione con l'uso di ":" e "?". E' un'abbreviazione del classico

if (...) return +1;
else if (...) return -1;
...


?
__________________
Cerco fotocamera con buono zoom!! CLICCA!
° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) °
Andrea16v è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 18:30   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il codice equivalente è questo:

if (memoria > tmp.memoria) return +1;
else if (memoria < tmp.memoria) return -1;
else return 0;

Ultima modifica di cionci : 24-08-2006 alle 23:50.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 23:23   #8
Andrea16v
Senior Member
 
L'Avatar di Andrea16v
 
Iscritto dal: Mar 2003
Messaggi: 3852
Quote:
Originariamente inviato da cionci
Il codice equivalente è questo:

if (memoria > tmp.memoria) return +1;
else if (memoria > tmp.memoria) return -1;
else return 0;
Avevo immaginato bene...
Abbreviare questa operazione è una gran cosa, anche perchè è un metodo molto frequente, ma ci sono motivi particolari per l'adozione di questi comandi (":" e "?") come abbreviazione?
__________________
Cerco fotocamera con buono zoom!! CLICCA!
° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) °
Andrea16v è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2006, 23:50   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No, non ce n'è alcuno, ma a volte fa davvero comodo...

Concatenare più volte l'operatore ternario non mi piace molto, ma a volte mi piace molto usarlo...

Ad esempio in questi casi è perfetto e secondo me leggibilissimo:

if(a == b) return 1;
else return 0;

che si sostituisce con:

return (a == b) ? 1 : 0;

Oppure:

if(a == c) b = 1;
else b = 0;

che si sostituisce con:

b = (a == c) ? 1 : 0;
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2006, 00:05   #10
Andrea16v
Senior Member
 
L'Avatar di Andrea16v
 
Iscritto dal: Mar 2003
Messaggi: 3852
Questi ultimi li trovo un po' ostici da digerire, me li segno così se li dovessi incocciare da qualche parte me li vengo a vedere, bisogna un po' calarsi nel ruolo per saperli riconoscere senza appunti davanti..
Se invece dico, per esempio con una lista parcheggio di oggetti automobile:
Codice:
List<Automobile> multati = new ArrayList<Automobile>();
for (Automobile a : parcheggio) {
  if (biglietto scaduto) {
      multati.add(a);
  }
}
Il comando (Automobile a : parcheggio) è un'abbreviazione per la scansione di tutta la struttura dati con un iteratore e clausola hasNext() ?
__________________
Cerco fotocamera con buono zoom!! CLICCA!
° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) °
Andrea16v è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2006, 00:48   #11
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
E' come se fai:
Codice:
for(int i=0;i<parcheggio.size();i++){
       if(bigliettoScaduto) multati.add(parcheggio.get(i));
}
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2006, 09:38   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Andrea16v
Il comando (Automobile a : parcheggio) è un'abbreviazione per la scansione di tutta la struttura dati con un iteratore e clausola hasNext() ?
Hai mai visto php ? Quello è il classico comando foreach...in pratica per ognuno degli elementi di parcheggio esegui il blocco... Per ogni iterazione in "a" va a finire un elemento di parcheggio... E' una caratteristica di Java 1.5...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
Meta testa Instagram Plus: abbonamento a...
Recensione ASUSTOR LockerStor 2 Gen2+: l...
SpaceX conferma anomalia per il satellit...
Apple rilascia le prime beta 26.5 di iOS...
Warhorse Studios sostituisce i traduttor...
Ecco perché in tanti stanno comprando Ap...
Intesa Sanpaolo, multa da 31,8 milioni d...
Stellantis, rinnovo di 5 anni con Palant...
Google Pixel 11 si mostra nei render CAD...
Xbox Games Showcase torna a giugno con u...
OPPO fissa l'evento Find X9 Ultra: tutto...
Apple porta la pubblicità in Maps...
BYD ha licenziato 100.000 persone nel 20...
FRITZ!Box 5690 Pro a 275€ e il nuovo FRI...
I segreti dei 2 nanometri di TSMC rubati...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v