Witam, mam mały problem z przejściem z C na Jave.
if (!inTree[i])
Jak powyższy kod będzie wyglądał w Javie? dodam że inTree[] to tablica char.
if (inTree[i] == '\u0000')
Chyba ;)
hmm, dalej mi nie działa, więc pewnie gdzie indziej robię błąd. Jak by ktoś mógł zerknąć w wolnej chwili. Kod w C:
/* Add the first node to the tree */
printf("Adding node %c\n", 'A');
inTree[0] = 1;
updateDistances(0);
int total = 0; //total distance
int treeSize;
for (treeSize = 1; treeSize < n; ++treeSize) {
/* Find the node with the smallest distance to the tree */
int min = -1;
for (i = 0; i < n; ++i){
if (inTree[i]==0)
{ if ((min == -1) || (d[min] > d[i]))
min = i;}
}
/* And add it */
printf("Adding edge %c-%c\n", whoTo[min]+'A' , min +'A');
inTree[min] = 1;
total += d[min];
updateDistances(min);
}
printf("Total distance: %d\n", total);
getchar();
return 0;
a tu moja próba zrobienia Javy:
/* Add the first node to the tree */
System.out.println("Adding node "+ 'A');
inTree[0] = 1;
updateDistances(0);
int total = 0; //total distance
int treeSize;
for (treeSize = 1; treeSize < n; ++treeSize) {
/* Find the node with the smallest distance to the tree */
int min = -1;
for (i = 0; i < n; ++i){
// System.out.println("inTree[i]: "+ inTree[i]);
if (inTree[i]=='\u0000')
{ if ((min == -1) || (d[min] > d[i]))
min = i;}
}
/* And add it */
jj3=whoTo[min]+'A';
jj4=min+'A';
System.out.println("Adding edge "+ jj3+" " + jj4 );
System.out.println("min:\n"+min);
inTree[min] = 1;
total += d[min];
updateDistances(min);
}
inTree w tym kodzie pełni najwyraźniej rolę tablicy małych liczb, a nie tablicy znaków.
Dlatego należy użyć typu byte[] lub short[] (dwubajtowy) dla tej tablicy. W przypadku byte[] trzeba sprawdzić czy elementy nie są większe od 127 ponieważ w javie wszystkie typy liczbowe są ze znakiem, a w C można je używać tak jakby były unsigned oraz mieszać typy znakowe, liczbowe i logiczne ze sobą (co jest zresztą wadą C/C++).
Co do innych zmian, to trzeba wywołania printf() poprzedzić przez "System.Out." i cały kod powinien się kompilować w javie bez wprowadzania innych zmian. Przynajmniej tego kawałka.