Pages: 1 [2]   Go Down
Print
Author Topic: leggere due file contemporaneamente  (Read 2640 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #15 on: 12-02-2010, 10:45:33 »

Come sarebbe allora il modo opportuno per farlo? Io ho un problema simile con un altro esercizio, dove ho sempre un file di oggetti di tipo prodotto(codice,nome) e un file di oggetti di tipo relazioni(prodotto1,prodotto2,p) dove p rappresenta il numero di volte che tali prodotti sono venduti assieme.
Mi viene posto di aggiungere un arco di peso p al grafo G rappresentato come lista di adiacenza non orientato, dove i nodi di G sono dati da codice e nome.
Io ho implementato la seguente classe Relazioni:
Code:
import java.io.*;
public class Relazioni implements Serializable
{
private Prodotto p1;
private Prodotto p2;
private int p;

public Relazioni(Prodotto p1,Prodotto p2,int p)
{
this.p1=p1;
this.p2=p2;
this.p=p;
}
public void setp1(Prodotto p1)
{
this.p1=p1;
}
public Prodotto getp1()
{
return p1;
}
public void setp2(Prodotto p2)
{
this.p2=p2;
}
public Prodotto getp2()
{
return p2;
}
public void setnV(int p)
{
this.p=p;
}
public int getnV()
{
return p;
}
public String toString()
{
String str="";
str+=""+this.getp1()+""+this.getp2()+""+this.getnV();
return str;
}
}
La classe in cui leggo i dati da file
Code:
import java.io.*;
public class LeggiDati {

public static void main (String args[]) throws Exception
{
Prodotto p;
Relazioni r;
GrafoLA grafo=new GrafoLA();
try
{
FileInputStream f=new FileInputStream("prodotti");
ObjectInputStream fIN=new ObjectInputStream(f);
FileInputStream f1=new FileInputStream("relazioni");
ObjectInputStream fin=new ObjectInputStream(f1);
while(true)
{
try
{
//grafo.aggiungiNodo((Prodotto)fIN.readObject());
p=(Prodotto) fIN.readObject();
NodoLA g=grafo.aggiungiNodo(p.getCodice());
NodoLA g1=grafo.aggiungiNodo(p.getNome());
//System.out.println(grafo);
grafo.aggiungiArco(g,g1,1.2);
System.out.println(grafo);
//System.out.println("Codice"+p.getCodice());
//System.out.println("Nome"+p.getNome());
}
catch(EOFException e)
{
break;
}
}
f.close();
while(true)
{
try
{

r=(Relazioni) fin.readObject();
System.out.println(r.getp1());
System.out.println(r.getp2());
System.out.println(r.getnV());
}
catch(EOFException e)
{
break;
}
}
f1.close();
}
catch(Exception e)
{
System.out.println("Eccezione: "+e.getMessage());
}
}
}
Dato che tramite fin.readObject() ottengo prodotto1,prodotto2,p, di predisporre tutto già all'interno della classe Relazioni.
Questa è la mia idea. Spero possa esservi utile
Logged
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« Reply #16 on: 13-02-2010, 17:22:46 »

non ho capito se in questo tuo esercizio il nodografo debba contenere un unico prodotto e la sua relazione,o se debba contenere:

nodo g=codiceprodotto;
nodo g1=nomeprodotto;

e poi quando aggiungi inserisci il peso dell'arco....
Ed in questo secondo caso non capisco da dove venga fuori il valore 1.2,visto che in quel punto se non sbaglio non stai leggendo dal file relazioni,ma da quello prodotti...
spero che il dubbio sia chiaro...
Logged
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« Reply #17 on: 13-02-2010, 18:31:56 »

Se ipotizziamo che per ogni due prodotti,vi sia una relazione,e che siano messe in ordine,allora abbiamo che ad ogni due righe di lettura di prodotti abbiamo una lettura di relazione che li interessa...

Se invece le relazioni fossero messe a caso allora dovremmo confrontare i prodotti letti,con le relazioni dell'altro file e quindi un altro while interno... ma questa parte non la ho capita granchè..

Code:
public static void main(String[]args){
    try{lettura();}catch(IOException e){System.out.print("fallita");}
    }
   
    public static void lettura(){
        try{
            ObjectInputStream in=new ObjectInputStream(new FileInputStream("prodotti.dat"));
            ObjectInputStream IN=new ObjectInputStream(new FileInputStream("relazioni.dat"));
        //{}
       
        /*
        Variabili interne di prodotto1 e prodotto2 -> codice,nome
        Variabili interne di relazione -> prodotto1,prodotto2,valore
        */
            while(true){
                try{
                    prodotto p1=(prodotto)in.readObject();
                    prodotto p2=(prodotto)in.readObject();
               
                    if(!G.exists(p1))
                        G.aggiungi(p1);
                    if(!G.exists(p2))
                        G.aggiungi(p2);
               
                    relazione r=(relazione)IN.readObject();
                    G.aggiungiArco(p1,p2,r.getNumeroVenduti());
               
                }catch(IOException e){break;}
            }
        }catch(Exception e){System.out.println("eccezione generica")};
    }

e la classe arcografo

Code:
public class arcografo{
    private nodografo src,dst;
    private int vendite;
   
    public arcografo(nodografo s,nodografo d,int peso){
        src=s;
        dst=d;
        vendite=peso;
    }
   
    public nodografo getSrc(){return src;}
    public nodografo getDst(){return dst;}
    public int getVendite(){return vendite;}
}

Ovviamente non ho la minima idea del sicuro funzionamento di questo codice......però forse a livello ideale ci sono...
se ho fatto errori  pray
se invece il ragionamento fila  ok  yoh
Logged
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #18 on: 13-02-2010, 19:31:05 »

Allora quell'aggiungiArco altro non è che una prova per verificare se il metodo funzionava...
Poi l'esercizio richiedeva questo:
Quote
Dato un file di oggetti di tipo prodotto(codice,nome), caricarli come
nodi di un grafo G non orientato rappresentato con lista di adiacenza. Dato un file di oggetti di tipo relazione(prodotto1,
prodotto2, p), dove prodotto1 e prodotto2 sono oggetti di tipo prodotto, e p è un intero positivo che rappresenta il numero di volte che tali prodotti sono stati venduti assieme, aggiungere un arco di
peso p al grafo G che collega i due prodotti.
Questo era il quesito del problema.. Grazie ho visto comunque la tua soluzione ed ora cerco tra oggi e domani di postare la mia.
Logged
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« Reply #19 on: 14-02-2010, 16:29:16 »


Mi chiedo se sia possibile fare due letture separate nel tempo (anzichè contemporanee) in modo da salvare gli oggetti in una lista e poi confrontarli con le relazioni nella seconda lettura e quindi qui inserire gli archi....

perchè in questo modo funziona...credo... boh
Logged
Pages: 1 [2]   Go Up
Print
Jump to: