PDA

View Full Version : [java] metodo da c a java


mikael_c
24-10-2014, 17:07
devo tradurre un metodo da c in java però ho delle difficoltà nella traduzione soprattutto nella parte dove vien calcolato maxref ,dove vi sono i puntatori,ed array qualcuno può aiutarmi in questo? sotto ho postato il codice in C:

void FixReferenceSets(ObjDesc *od)
{
int i,j,maxref=0;
((void) 0);
if (od->flag++) return;
for (i=0;i<od->kids;i++)
{
ElmDesc *ed=&(od->elm[i]);
ObjDesc *son=&objs[ed->id];
if (!son) continue;
if (ed->pd.min>1 && !hasID(son))
{
int size;
double local_factor=1;
for (j=0;j<5;j++)
{
if (son->att[j].name[0]=='\0') break;
maxref=(((maxref)<(objs[son->att[j].ref].set.size)?(objs[son->att[j].ref].set.size):(maxref)));
}
if (!maxref) break;
local_factor=maxref/ed->pd.max;
size=(int)(GenRandomNum(&ed->pd)+0.5);
size=(int)(((1)<(size*local_factor)?(size*local_factor):(1)));
son->set.size+=size;
FixDist(&ed->pd,size);
}
FixReferenceSets(son);
}
}

sottovento
25-10-2014, 09:24
Occorre fare un bel po' di supposizioni sulle parti mancanti, la loro implementazione, ecc.
Con una serie di ipotesi aggiuntive ragionevoli, una prima versione potrebbe essere:


public void FixReferenceSets(ObjDesc od)
{
int i,j,maxref=0;

if (od.flag++) return;
for (i=0;i<od.kids;i++)
{
ElmDesc ed=od.elm[i];
ObjDesc son=objs[ed.id];
if (!son) continue;
if (ed.pd.min>1 !hasID(son))
{
int size;
double local_factor=1;
for (j=0;j<5;j++)
{
if (son.att[j].name.size() == 0) break;
maxref=(((maxref)<(objs[son.att[j].ref].set.size)?(objs[son.att[j].ref].set.size):(maxref)));
}
if (!maxref) break;
local_factor=maxref/ed.pd.max;
size=(int)(GenRandomNum(ed.pd)+0.5);
size=(int)(((1)<(size*local_factor)?(size*local_factor):(1)));
son.set.size+=size;
FixDist(ed.pd,size);
}
FixReferenceSets(son);
}
}


Immagino che ragionavolmente abbia azzeccato il 50% della modalita' di implementazione delle parti mancanti.
Potresti partire da questa versione ed adattare a seconda degli errori di compilazione

mikael_c
27-10-2014, 10:05
vi ringrazio in anticipo per l'aiuto, ti descrivo brevemente il codice:
ElemenDesc, Objdesc sono delle classi con le relative proprietà,come anche ProbDesc pd, HashID(),GenRandomNum(),FixDist() sono metodi che vengono passati nel seguente metodo.Io ho implementato il tutto nel seguente modo, però non sono sicuro che sia corretto:
public void FixReferenceSets(ObjDesc od)
{
int i=0,j=0,maxref=0;


if (od.flag==od.flag+1) return;
for (i=0;i<od.kids;i++)
{
ElemDesc ed=od.listaElemDesc.get(i);
ObjDesc son=listaObjDesc.get(ed.getId());

ProbDesc pd=new ProbDesc();
if (son!=null) continue;
if ((ed.getPd().getMax()>1)&& !(hasID(son)))
{
int size=0;
double local_factor=1;
for (j=0;j<5;j++)
{
if (son.att.getName()==0) break;
maxref=(((maxref)<set.getSize(objs[son.att.getRef()])?set.getSize(objs[son.att.getRef()]):(maxref)));
}
if (maxref==0) break;
local_factor=maxref/ed.getPd().getMax();
size=(int)(GenRandomNum(ed.getPd())+0.5);
size=(int)(((1)<(size*local_factor)?(size*local_factor):(1)));
son.set.getSize()+=size;
FixDist(ed.getPd(),size);
}
FixReferenceSets(son);
}
}

sottovento
29-10-2014, 11:15
Potrebbe esserlo, ovviamente dipende dal resto del codice.
Ho visto pero' che hai creato un oggetto, i.e.

ProbDesc pd=new ProbDesc();


e poi di quell'oggetto non ce ne fai nulla. Una ripassata al codice la darei ;)