Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-07-2009, 13:29   #1
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
[Java] Problema con i Comparable

Ciao, ho un esercizio in cui devo fare una funzione statica per trovare il minimo tra i massimi di ciascuna riga di una matrice di oggetti Comparable passata come argomento.
Io però ho un piccolo problemino con i comparable... vi posto la bozza del programma che ho fatto così capirete da soli, se qualcuno mi può dare una mano...


Codice:
public static int Minimo(Comparable mat[][]) {
		Comparable min, v[];
		Comparable max;
		for (int j = 0; j < mat.length; j++) {
			max = mat[j][0];
			for (int k = 0; k < mat[0].length - 1; k++) {
				v[j] = max;
				if (max.compareTo(mat[j][k + 1]) == -1)
					max = v[j] = mat[j][k + 1];
			}
		}

		min = v[0];
		for (int i = 1; i < v.length - 1; i++) {
			if (min.compareTo(v[i] == -1))
				min = v[i];
		}

		return min;
	}
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2009, 15:34   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non vedo l'inizializzazione di v[], manca qualche parentesi, il metodo dichiara la restituzione di un int ma tenta di restituire un Comparable.

Per il resto i Comparable funzionano quasi come pensi: non restituiscono -1, 0 o 1 ma un valore minore di zero, uguale a zero o maggiore di zero nei casi minore, uguale, maggiore. Può essere -1, può essere -2000: conta il segno.

Anzichè dire if(a.compareTo(b) == -1) devi dire if(a.compareTo(b) < 0) e, analogamente per il caso maggiore, if(a.compareTo(b) > 0) anzichè if(a.compareTo(b) == 1).

L'algoritmo è corretto
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2009, 15:46   #3
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Non vedo l'inizializzazione di v[], manca qualche parentesi, il metodo dichiara la restituzione di un int ma tenta di restituire un Comparable.

Per il resto i Comparable funzionano quasi come pensi: non restituiscono -1, 0 o 1 ma un valore minore di zero, uguale a zero o maggiore di zero nei casi minore, uguale, maggiore. Può essere -1, può essere -2000: conta il segno.

Anzichè dire if(a.compareTo(b) == -1) devi dire if(a.compareTo(b) < 0) e, analogamente per il caso maggiore, if(a.compareTo(b) > 0) anzichè if(a.compareTo(b) == 1).

L'algoritmo è corretto
mi aveva detto il prof che i comparable funzionavano così...
ho fatto al volo qualche correzione come mi hai suggerito:
Codice:
	public static Comparable Minimo(Comparable mat[][]) {
		Comparable min, max;
		Comparable v[] = new Comparable [mat.length];
		
		for (int j = 0; j < mat.length; j++) {
			max = mat[j][0];
			for (int k = 0; k < mat[0].length - 1; k++) {
				v[j] = max;
				if (max.compareTo(mat[j][k + 1]) < 0)
					max = v[j] = mat[j][k + 1];
			}
		}

		min = v[0];
		for (int i = 1; i < v.length - 1; i++) {
			if (min.compareTo(v[i] < 0))
				min = v[i];
		}

		return min;
	}
ma mi segna ancora in rosso la parte v[i] < 0 dell'ultimo ciclo for..

intanto grazie x la risposta
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2009, 15:48   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
C'è una parentesti al posto sbagliato.

Da così:

if (min.compareTo(v[i] < 0))

a così:

if (min.compareTo(v[i]) < 0)
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2009, 10:45   #5
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
thank you a PGI-Bis, il programma finito è questo:
Codice:
public static Comparable minimo(Comparable mat[][]) {
		Comparable min, max;
		Comparable v[] = new Comparable[mat.length];

		for (int j = 0; j < mat.length; j++) {
			max = mat[j][0];
			for (int k = 1; k < mat[0].length; k++) {
				v[j] = max;

				if (max.compareTo(mat[j][k]) < 0) {
					max = v[j] = mat[j][k];

				}
			}
		}

		min = v[0];
		for (int i = 1; i < v.length; i++) {
			if (min.compareTo(v[i]) > 0)
				min = v[i];
		}
		System.out.println(min);
		return min;
	}
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2009, 12:58   #6
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Scusate avrei l'ultimo esercizio da svolgere.. però qua non so dove mettere le mani prima.. il testo è questo:
Scrivere il codice di una semplice funzione statica ricorsiva che ritorni il valore più piccolo presente in un albero binario di oggetti Comparable.
ora, essendo l'albero binario già ordinato, dovrei scorrere solo nel ramo sinistro, confrontare i valori e prendere il minore... ma come potrei scorrere nel ramo sinistro?
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2009, 13:48   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Be', vai sempre a sinistra.

Ogni nodo del tuo albero avrà al più due figli, il destro e il sinistro. Avrai quindi una funzione tipo:

Codice:
Valore getMinimo(Nodo n)
    se n->left == null return n.valore
    altrimenti return getMinimo(n.left);
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2009, 15:33   #8
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Be', vai sempre a sinistra.

Ogni nodo del tuo albero avrà al più due figli, il destro e il sinistro. Avrai quindi una funzione tipo:

Codice:
Valore getMinimo(Nodo n)
    se n->left == null return n.valore
    altrimenti return getMinimo(n.left);
dovrei presupporre di avere nodi di questo tipo no?
Codice:
private class BinNode { 
	private Object key; 
	private BinNode left; 
	private BinNode right; 
	private BinNode parent;


	BinNode( Object c, BinNode sx, BinNode dx,  BinNode g ) { 
		key = c; 
		left = sx; 
		right = dx; 
		parent = g; 
	
		if (sx != null) 
			sx.parent = this; 
		if (dx != null) 
			dx.parent = this; 
		}
	}
e per scorrere sempre verso sinistra che codice dovrei usare?
come hai scritto tu, in un nodo prendo il valore minimo, ma io dovrei fare un codice ricorsivo che controlla tutti i nodi e prenda il minimo fra tutti i valori...
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2009, 15:44   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se l'albero è ordinato e il criterio di ordinamento colloca a sinistra il valore minore allora il minimo è la foglia più a sinistra che hai.

La funzione ricorsiva:

Codice:
Comparable getMinimum(Nodo n) {
    if(n.getLeft() != null) return getMinimum(n.getLeft());
    else return n.getValue();
}
fa esattamente questo: scende più a sinistra che può e quando arriva alla foglia più a sinstra che c'è, PAF, restituisce il suo valore. Un albero ordinato in tal modo lo ottieni quando l'inserimento di un valore nella radice ha la forma:

Codice:
public void add(Comparable v) {
    if(v.compareGetValue() < 0) {
       //aggiungi v a left
   } else {
      //aggiungi v a right
   }
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2009, 15:54   #10
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
ok, recepito il messaggio!!!
thank you very much per il supporto tecnico!!!
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2009, 16:04   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Codice:
    void add(Comparable key)
    {
        BinNode newNode = new BinNode(key);
        BinNode father = null, temp = this;

        // trova il padre per il nuovo nodo
        while (temp != null)
        {
            father = temp;
            if (newNode.key.compareTo(temp.key) < 0)
                temp = temp.left;
            else
                temp = temp.right;
        }

        newNode.parent = father;

        // inserisce il nuovo nodo a destra o a sinistra del padre
        if (newNode.key.compareTo(father.key) < 0)
            father.left = newNode;
        else
            father.right = newNode;
    }
Esempio:
BinNode root = new BinNode(new Integer(8));
root.add(new Integer(4)); // lo aggiunge come figlio sinistro di root
root.add(new Integer(10)); // lo aggiunge come figlio destro di root

la classe BinNode deve accettare Comparable e quindi la chiave (key) deve essere di tipo Comparable.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Il JPL estende la vita operativa della s...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Il regista Rian Johnson lancia a 12,99 d...
Microsoft stravolge l'app Sicurezza di W...
Mercato smartphone in caduta libera: -20...
Android 17 QPR3 Beta 3 riporta il blocco...
Le 10 offerte TOP in Amazon del weekend:...
Dyson, doppio crollo su Amazon: purifica...
Il 70% delle imprese non vede effetti de...
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: 22:28.


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