konwersja c na jave

0

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.

0

if (inTree[i] == '\u0000')
Chyba ;)

0

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);
	}
                
0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1