Java programozásban kéne segítség: int és double váltogatása - van egyszerűbb megoldá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);
}
}
}
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).
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.
+ 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
"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);
}
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?
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:
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!