czolem,
mam w wyniku liczbe typu float. jak szybko sprawdzic czy jest calkowita?
pozdrawiam,
wk
czolem,
mam w wyniku liczbe typu float. jak szybko sprawdzic czy jest calkowita?
pozdrawiam,
wk
private boolean jestCalkowita(float f){
return f%1 == 0.0f;
}
ten warunek niestety nie dziala jak powinien. ostatni if przepuszcza mi niestety wszystkie kolejno wygenerowane tablice o czym swiadcza kolejno ulozone wartosci zmiennej petla. wzialem pierwszy wynik z brzegu z tablicy i sprawdzilem. wyszly mi wartosci ulamkowe a nie calkowite. help?
import java.util.Random;
public class Main {
public static boolean jestCalkowita(float f){
return f%1f == 0.0f;
}
public static void main(String[] args)
{
int tablica1[][] = new int[4][40];
int n = 1;
int j = 0;
int petla = 0;
int x = 1;
tablica1[1][j] = 2; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 22; tablica1[2][j] = 2; tablica1[3][j] = 0; j++;
tablica1[1][j] = 16; tablica1[2][j] = 3; tablica1[3][j] = 0; j++;
tablica1[1][j] = 21; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 25; tablica1[2][j] = 5; tablica1[3][j] = 0; j++;
tablica1[1][j] = 1; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 9; tablica1[2][j] = 1; tablica1[3][j] = 0; j++;
tablica1[1][j] = 11; tablica1[2][j] = 5; tablica1[3][j] = 0; j++;
tablica1[1][j] = 15; tablica1[2][j] = 2; tablica1[3][j] = 0; j++;
tablica1[1][j] = 8; tablica1[2][j] = -7; tablica1[3][j] = 0; j++;
tablica1[1][j] = 5; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 19; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 25; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 30; tablica1[2][j] = -21; tablica1[3][j] = 0; j++;
tablica1[1][j] = 25; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 1; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 35; tablica1[2][j] = 11; tablica1[3][j] = 0; j++;
tablica1[1][j] = 25; tablica1[2][j] = -17; tablica1[3][j] = 0; j++;
tablica1[1][j] = 25; tablica1[2][j] = -2; tablica1[3][j] = 0; j++;
tablica1[1][j] = 25; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 0; tablica1[2][j] = -8; tablica1[3][j] = 25; j++;
tablica1[1][j] = 0; tablica1[2][j] = -12; tablica1[3][j] = 22; j++;
tablica1[1][j] = 0; tablica1[2][j] = -37; tablica1[3][j] = 25; j++;
tablica1[1][j] = 0; tablica1[2][j] = -8; tablica1[3][j] = 18; j++;
tablica1[1][j] = 0; tablica1[2][j] = 0; tablica1[3][j] = 35; j++;
tablica1[1][j] = 0; tablica1[2][j] = 0; tablica1[3][j] = 25; j++;
tablica1[1][j] = 0; tablica1[2][j] = -45; tablica1[3][j] = 35; j++;
tablica1[1][j] = 0; tablica1[2][j] = -4; tablica1[3][j] = 15; j++;
tablica1[1][j] = 0; tablica1[2][j] = -30; tablica1[3][j] = 25; j++;
tablica1[1][j] = 0; tablica1[2][j] = -12; tablica1[3][j] = 65; j++;
tablica1[1][j] = 45; tablica1[2][j] = 19; tablica1[3][j] = 0; j++;
tablica1[1][j] = 35; tablica1[2][j] = 15; tablica1[3][j] = 0; j++;
tablica1[1][j] = 35; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
tablica1[1][j] = 50; tablica1[2][j] = 29; tablica1[3][j] = 0; j++;
tablica1[1][j] = 35; tablica1[2][j] = 17; tablica1[3][j] = 0; j++;
tablica1[1][j] = 0; tablica1[2][j] = -400; tablica1[3][j] = 0; j++;
tablica1[1][j] = 0; tablica1[2][j] = -300; tablica1[3][j] = 0; j++;
tablica1[1][j] = 0; tablica1[2][j] = -250; tablica1[3][j] = 0; j++;
tablica1[1][j] = 0; tablica1[2][j] = -150; tablica1[3][j] = 0; j++;
tablica1[1][j] = 0; tablica1[2][j] = -100; tablica1[3][j] = 0;
int id = 80 ;
int hp = 420; int wei = 3648; int han = 325;
do
{
float hpID = 0;
float weightID = 0;
int sumfor = 0;
int sumwei = 0;
int sumhan = 0;
Random rand = new Random();
for (int m = 0; m < 40; m++)
{
tablica1[0][m] = rand.nextInt(n+1);
}
for (int i = 0; i<40; i++)
{
if (tablica1[0][i] == 1)
{
sumfor += tablica1[1][i];
sumwei += tablica1[2][i];
sumhan += tablica1[3][i];
}
}
int totfor = sumfor + hp;
int totwei = sumwei + wei;
int tothan = sumhan + han;
weightID = totfor/id*tothan;
hpID = totwei/tothan*id;
if (jestCalkowita(weightID) && jestCalkowita(hpID))
{
for (int y = 0; y < 40; y++)
{
System.out.print(tablica1[0][y]);
}
System.out.println(" " +petla);
}
petla += 1;
} while (x>0);
}
}
private boolean jestCalkowita(float f){
return Math.ceil(f)==Math.floor(f);
}
nie no, obie metody sa okej, nie wiem tylko dlaczego na ostatnim warunku wszystkei wyniki traktuje jako true bo drukuje mi kolejno wszystkie wygenerowane tablice.
Zrobiłem małą zmianę
System.out.println(weightID);
System.out.println(hpID);
/*if (jestCalkowita(weightID) && jestCalkowita(hpID))
{
for (int y = 0; y < 40; y++)
{
System.out.print(tablica1[0][y]);
}
System.out.println(" " +petla);
}*/
i zobaczyłem,że zmienne weightID oraz hpID mają wartości całkowite.
Poza tym pętla
do
...
while(x>0)
jest nieskończona
wiem ze petla jest nieskonczona, bo mialo liczyc przez cala noc ;)
btw, jak recznie wprowadzam wypisane przez komputer wartosci na kalkulatorze to wychodza mi wartosc z przecinkami. nie mam pojecia dlaczego w aplikacji sa one caly czas calkowite. gdzies popelniam blad.
aplikacja wyrzucila mi:
totfor = 591 tothan = 488 totwei = 2654 weightID = 3416.0 hpID = 400.0
ale z kalkulatora jasno wynika ze weightID poiwnno byc rowne 3605.1
zgodnie z formula w aplikacji: weightID = totfor/id*tothan;
zatem co jest grane? skad on bierze dane wartosc totfor i tothan ze caly czas podaje mi calkowite?
((float)a)/b;
dzieki wielkie! problem rozwiazany, wlasnie o to chodzilo. wszystko dziala cudnie. pozdrawiam i milej reszty dlugiego weekendu