Kezdőoldal » Számítástechnika » Programozás » Java programozásban kéne...

Java programozásban kéne segítség: int és double váltogatása - van egyszerűbb megoldás?

Figyelt kérdés

Elég új vagyok Java-ban. A lényege ennek a programnak az, hogy ha hívom és adok neki paramétereket, amik lehetnek egész vagy törtszámok, akkor kiírja a műveletet és a megoldást is, nyilván. A probléma az volt, hogy ha egész számot adtam meg paraméterként, akkor a double miatt azt írta ki, hogy pl 2.0*2.0=4.0. Azt csináltam, hogy megnézettem minden lehetőséget, és az egész számokat átváltottam int-be, hogy pl 2-t írjon ki 2.0 helyett. Működik, de így nagyon összezavaró és hosszú lett. A kérdés, hogy van-e egyszerűbb/rövidebb megoldás, mint ez?



public static void multiplication (double member1, double member2) {

double z = member1*member2; //összeszorozza a két adott számot

if (z == (int)z) {

int zint = (int) z;

if (member1 == (int)member1) {

int member1int = (int) member1;

if (member2 == (int)member2) {

int member2int = (int)member2;

System.out.println(member1int + "*" + member2int + "=" + zint);

}else{

System.out.println(member1int + "*" + member2 + "=" + zint);

}


}else if (member2 == (int)member2) {

int member2int = (int)member2;

System.out.println(member1 + "*" + member2int + "=" + zint);

}else{

System.out.println(member1 + "*" + member2 + "=" + zint);

}


}else{

if (member1 == (int)member1) {

int member1int = (int) member1;

if (member2 == (int)member2) {

int member2int = (int)member2;

System.out.println(member1int + "*" + member2int + "=" + z);

}else{

System.out.println(member1int + "*" + member2 + "=" + z);

}


}else if (member2 == (int)member2) {

int member2int = (int)member2;

System.out.println(member1 + "*" + member2int + "=" + z);

}else{

System.out.println(member1 + "*" + member2 + "=" + z);

}


}

}



2018. júl. 24. 10:18
 1/7 anonim ***** válasza:
0%

Szentszar.

Terheld túl a függvényt intre meg doublere is (figyelve arra, hogy két intet elosztva az eredmény nem biztos, hogy az várt lesz).

2018. júl. 24. 10:23
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
92%

Uhh, amit írtál nagyon csúnya.


Ennyit írj:

public static void multiplication (double member1, double member2) {


    double z = member1*member2; //összeszorozza a két adott számot


    java.text.DecimalFormat df = new java.text.DecimalFormat("#.###");

    System.out.println(df.format(member1) + "*" + df.format(member2) + "=" + df.format(z));

}


Ill a java.text-et felviheted az importok közé hogy ne kelljen kiírni.


Az #1-es válaszoló tulterheléses válasza sztem hülyeség, hisz 2 nem egész szám szorzata simán lehet egész, akkor ugyanúgy vizsgálnod kéne.

2018. júl. 24. 10:33
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
92%

+ túlterhelés esetén knee egy (int, int), egy (int, double), egy (double,int) és egy (double,double) függvény, kódsorban még több is mint a tied:) pláne hogy midnegyiken belül vizsgálni kell a szorzat típusát.


És még anynit akartam írni, hogy a #.###-nél a pontok utáni # száma adja meg, hogy maximum hány tizedesjegyet ír ki.


Tehát az 5.0 ez lesz: 5

5.23 => 5.23

5.5431 => 5.543

2018. júl. 24. 10:36
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:
58%

"A probléma az volt, hogy ha egész számot adtam meg paraméterként, akkor a double miatt azt írta ki, hogy pl 2.0*2.0=4.0"


Ezzel tanulj meg együtt élni. :)

Semmi jelentősége nincs, hogy 4-et vagy 4.0-t ír-e ki.

Ha a műveleteid 90% törtes 10%-a meg egészes, akkor muszáj mindent törtként számolnod.


De ha nagyon akarod, akkor a kiírást meg lehet formázni.

Tehát double-el számolsz mindenképp és csak a kiírásba nyúlsz bele, mondjuk úgy, hogy csinálsz egy printResult segédfüggvényt:


double z = member1*member2; //összeszorozza a két adott számot

printResult(member1, member2, z) //Szövegesen megjeleníti az eredményt:


void printResult(double member1, double member2, double z){

ret=""

if (isInteger(member1))

ret += (int) member1

else

ret += member1


ret += "*"


if (isInteger(member2))

ret += (int) member2

else

ret += member2


ret += "="


if (isInteger(z))

ret += (int) z

else

ret += z


System.out.println(ret);

}


public static boolean isInteger(double number){

return Math.ceil(number) == Math.floor(number);

}

2018. júl. 24. 11:48
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:
92%

Hát szvsz Ifjutitan kódja semmivel nem jobb mint a kérdezőé.


Kértem én mi a fenének írtok 20 sor felesleges kódot, amikor a Java alapból meg tudja formázni a lebegőpontos számokat úgy ahogy a kérdező szeretné?


Itt tényleg senki nem tud programozni?

2018. júl. 24. 12:46
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
80%

Oh my god :O

Erről szokj le, de nagyon hamar ha csak nem magadnak akarsz programozni. Bullshit komment "//összeszorozza a két adott számot" . Bárki aki látott már programot tudni fogja...... Az ilyen nonszensz if else szerkezeteket vélhető kódduplikációval is (nem néztem végig de eléggé bad smell ) . Ha tudsz már programozni és ismered az alapokat esetleg ezzel foglalkoznál a jövőben ajánlom mihamarabb a Clean Code nevű könyvet nem árt ha ezeket a fejedbe vésed elég hamar.


Amúgy:

https://www.youtube.com/watch?v=G9L8EqOr3fo

2018. júl. 24. 19:13
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Egy 15 éves lány vagyok, aki 3. napja tanulgatja a Java-t az internetről, úgyhogy no hate pls. Gondoltam, hogy van jobb megoldás, azért tettem fel a kérdést. A 2. válaszoló programja tökéletesen működik, köszönöm! Köszönöm a többiek válaszát is.
2018. júl. 25. 09:26

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!