Kezdőoldal » Számítástechnika » Programozás » Mi a gond ezzel a Java kóddal?

Mi a gond ezzel a Java kóddal?

Figyelt kérdés

public class Cone

{

private int r;

private int h;


public Cone(int r, int h)

{

this.r = r;

this.h = h;

}


public double getVolume()

{

double volume;

volume = 1/3 * Math.PI * Math.pow(r, 2) * h;

return volume;

}


}



2016. ápr. 28. 13:22
 1/5 anonim ***** válasza:
100%

Mondd meg te, neked nem működik. Legközelebb ha valami nem okés a kódoddal, akkor szíveskedj azt is elmondani, hogy mi a problémád vele, esetleg hibaüzenetet másolj be.


Most vettem a fáradságot, és megnéztem mi a probléma a kódoddal (sosem programoztam Java-ban, ezt leszögezném). Lefordul, tehát olyan hiba nincs benne, csak a getVolume() egy büdös 0.0-t ad vissza. Ez pedig annak okán van, hogy az értékadás elején egy 1/3 van. Ami integerként értékelődik ki. Tehát 0 lesz. Inenntől nullszorzóval megy végig az egész. Végérerakod egy sima /3 -ként és ez a probléma elhárul.

2016. ápr. 28. 13:44
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

Köszönöm szépen, hogy vetted a fáradságot, hogy segíts.


Ez egy kezdő szintű online kurzusból való feladat, csak annyit láttam, hogy valamiért nem fogadja el a megoldásomat. Most átírtam a javaslatod szerint, és így már jó, tehát igazad van, és köszi tényleg.


Az indoklást viszont sajnos nem egészen értem ("az értékadás elején egy 1/3 van. Ami integerként értékelődik ki. Tehát 0 lesz.") Ha még ezt is segítenél megérteni, igazán hálás volnék.

2016. ápr. 28. 14:46
 3/5 anonim ***** válasza:
100%

Amikor a volume változódnak átadod azt a képletet, akkor az sorban kiértékelődik, kezdve az 1/3-al. Az 1/3-ot fogd fel úgy, mint egy divide(1,3) függvényt. A divide függvényednek mindkét paramétere int, ebben az esetben pedig maga is int-el fog visszatérni. Már pedig 1/3 egész osztással 0-t fog eredményezni.


Másik emgoldás lenne, ha 1/3 helyett 1.0/3.0 szerepelne, ekkor már két lebegőpontos számot osztasz, és az eredmény is lebegőpontos szám lesz.

2016. ápr. 28. 15:05
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
100%

Javaban ha a per jel mindkét 2 oldalán egész szám áll, akkor egész osztás fog troténni.

Az 1 és a 3 egész számok, tehát

1/3 = 0, mivel 1-ben nincs meg a 3 egyszer sem.

Ezt bármivel szorzod 0 lesz.

A Math.Pi és a Math.pow már nem egészeket ad vissza, így ha a sor végén lesz a /3, akkor az osztás bal oldala már nem egész, (a 3 még az, de itt már nem számít),, így sima osztás lesz.


Amúgy ha a sor elején akaord hagyni, akkor így írd:

volume = 1.0/3 * Math.PI * Math.pow(r, 2) * h;

vagy

volume = 1/3.0 * Math.PI * Math.pow(r, 2) * h;

vagy

volume = 1/(double)3 * Math.PI * Math.pow(r, 2) * h;

volume = (double)1/3 * Math.PI * Math.pow(r, 2) * h;


Az utolsó 2 esetben explicit megadod, hogy az egész 3-ast tekintse lebegőpontos számnak (vagyis castolja át...)

2016. ápr. 28. 15:07
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Így már oké. Szuperek vagytok, köszi!!
2016. ápr. 28. 15:49

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!