Behöver hjälp med en uppgift är über noob!

Permalänk
Medlem

Behöver hjälp med en uppgift är über noob!

Hejsan, skulle vilja ha hjälp med ett program jag skrivit.

Får inte till "lägga till fler rutan" då man tycker nej vill jag att den ska skriva ut resultat på de inputsen man gjort hitills.

Den gjorde det först, men skrev samtidigt ut " Du får endast skriva siffor ".

Då jag har en try catch del som ska hindra att bokstäver skrivs in.

Så jag flyttade try catch delen så den skulle ligga innan "lägga till rutan".

Men då får jag error när man trycker nej i "lägga till fler rutan" det står Exception in thread "main" java.lang.ArithmeticException: / by zero
at uppgift.Btest.main(Btest.java:54).
Så här ser koden ut, tack så hemskt till den som lyckas hitta problemet <3

package uppgift;
import javax.swing.JOptionPane;
public class Btest {

private static final boolean ArithmeticException = false;

public static void main(String[] args) {

int totalman = 0;
int totalwoman = 0;
int manage= 0;
int womage= 0;
int x = 1;
int z = 0;
String s;

for(int i = 0; i < 10; i++) { // for loop
while(z < 10) {
try {

int knappNr = JOptionPane.showConfirmDialog(null, "Är du en man?");
if (knappNr == 0) { //ja
totalman++;
s = JOptionPane.showInputDialog("hur gammal är du?");
manage += Integer.parseInt(s);
}
else if (knappNr == 1) { // nej
totalwoman++;
s = JOptionPane.showInputDialog("Du är en kvinna, hur gammal är du?");
womage += Integer.parseInt(s);
}
else {
JOptionPane.showMessageDialog(null, "Hejdå");
System.exit(0); // avbryt programmet
}

}

catch (Exception e) {
JOptionPane.showMessageDialog(null, "Du får endast skriva siffor");
}

// Om man vill lägga till fler ruta

int fortsKnapp = JOptionPane.showConfirmDialog(null, "Vill du lägga till fler?");
if (fortsKnapp == 0) { // ja

}
else if (fortsKnapp == 1) { // nej, HÄR UPPSTÅR PROBLEMET, den vill ej skriva ut utan kraschar.
JOptionPane.showMessageDialog(null, "Antal män " + totalman + " st" + "\nMännens totala ålder " + manage + " år" + "\nMännens medelålder " + (manage / totalman) + " år" +
"\nAntal kvinnor " + totalwoman + " st" + "\nKvinnornas totala ålder " + womage + " år" + "\nKvinnornas medelålder " + (womage / totalwoman) + " år");
System.exit(0);
}
}
}

x=2;
z++;

while (x==1);
JOptionPane.showMessageDialog(null, "Antal män " + totalman + " st" + "\nMännens totala ålder " + manage + " år" + "\nMännens medelålder " + (manage / totalman) + " år" +
"\nAntal kvinnor " + totalwoman + " st" + "\nKvinnornas totala ålder " + womage + " år" + "\nKvinnornas medelålder " + (womage / totalwoman) + " år");
}
}

Permalänk
Medlem

Felmeddelandet du får är att du försöker dela med noll, vilket inte är möjligt. Du har t.ex. uträkningen manage / totalman i koden, och totalman är 0 innan man matat in något. Vilket ju är ganska logiskt, det går ju inte att räkna ut medelåldern om man inte har några åldrar att räkna på.

Använd gärna code-tagget när du postar kod förresten, annars blir det så svårt att läsa. T.ex.:
[code]
Kod här
[/code]

Permalänk
Medlem

Du delar med något som är 0, eller i ditt fall "totalman" eller "totalwoman".

Att dividera något med 0 är ej tillåtet och måste helt enkelt undvikas

Se över vad totalman eller totalwomen innehåller innan du försöker dividera med dessa, du finner dem både vid "else if (fortsKnapp == 1)" och i din while-loop längst ner i programmet.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
99:e percentilen
Skrivet av piivo:

private static final boolean ArithmeticException = false;

Vad är syftet med denna sats?

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

@Alling: Den skall inte vara där, tack

Permalänk
Medlem

import javax.swing.JOptionPane; public class TestB { public static void main(String[] args) { double a1 = 0; double a2 = 0; double g1 = 0; double g2 = 0; double m1 = g1 / a1; double m2 = g2 / a2; int i; String s; while (true) { try { int button1 = JOptionPane.showConfirmDialog(null, "Är du en man?"); if (button1 == 0) { a1++; s = JOptionPane.showInputDialog("Hur gammal är du?"); if (s == null) { System.exit(0); } g1 += Double.parseDouble(s); } else if (button1 == 1) { a2++; s = JOptionPane.showInputDialog("Du är en kvinna, hur gammal är du?"); g2 += Integer.parseInt(s); } else { JOptionPane.showMessageDialog(null, "Hejdå"); System.exit(0); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Du kan endast skriva siffor"); } int button2 = JOptionPane.showConfirmDialog(null, "Vill du lägga till fler?", "Välj", JOptionPane.YES_NO_OPTION); if (button2 == 1) { JOptionPane.showMessageDialog(null, "Antal män: " + a1 + " st" + "\nMännens medelålder: " + m1 + " år"); JOptionPane.showMessageDialog(null, "Antal kvinnor: " + a2 + " st" + "\nKvinnornas medelålder: " + ((double) g2 / (double) a2) + " år"); System.exit(0); } else if (button2 == JOptionPane.CLOSED_OPTION || button2 == JOptionPane.NO_OPTION) { System.exit(0); } } } }

Har ändrat lite i koden nu, men försöker lösa en sista grej, att M1 = G1/A1, och detta skall skrivas ut i männens fält. Om jag gör som med kvinnorna går det bra, men det är ej enligt strukturdiagrammet. Hur skall jag göra får att lyckas få M1 att bli utskrivet? får inge error nu men dock NaN... Jag vill alltså skriva ut A1 och M1.

Permalänk
Hedersmedlem
Skrivet av piivo:

import javax.swing.JOptionPane; public class TestB { public static void main(String[] args) { double a1 = 0; double a2 = 0; double g1 = 0; double g2 = 0; double m1 = g1 / a1; double m2 = g2 / a2; int i; String s; while (true) { try { int button1 = JOptionPane.showConfirmDialog(null, "Är du en man?"); if (button1 == 0) { a1++; s = JOptionPane.showInputDialog("Hur gammal är du?"); if (s == null) { System.exit(0); } g1 += Double.parseDouble(s); } else if (button1 == 1) { a2++; s = JOptionPane.showInputDialog("Du är en kvinna, hur gammal är du?"); g2 += Integer.parseInt(s); } else { JOptionPane.showMessageDialog(null, "Hejdå"); System.exit(0); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Du kan endast skriva siffor"); } int button2 = JOptionPane.showConfirmDialog(null, "Vill du lägga till fler?", "Välj", JOptionPane.YES_NO_OPTION); if (button2 == 1) { JOptionPane.showMessageDialog(null, "Antal män: " + a1 + " st" + "\nMännens medelålder: " + m1 + " år"); JOptionPane.showMessageDialog(null, "Antal kvinnor: " + a2 + " st" + "\nKvinnornas medelålder: " + ((double) g2 / (double) a2) + " år"); System.exit(0); } else if (button2 == JOptionPane.CLOSED_OPTION || button2 == JOptionPane.NO_OPTION) { System.exit(0); } } } }

Har ändrat lite i koden nu, men försöker lösa en sista grej, att M1 = G1/A1, och detta skall skrivas ut i männens fält. Om jag gör som med kvinnorna går det bra, men det är ej enligt strukturdiagrammet. Hur skall jag göra får att lyckas få M1 att bli utskrivet? får inge error nu men dock NaN... Jag vill alltså skriva ut A1 och M1.

Problemet med hur du gör för männen är att du försöker räkna ut medelåldrarna redan längst upp i början av main, där du inte har några värden. När du skriver

double m1 = g1 / a1;

så betyder det att m1 får värdet g1 / a1 baserat på vad g1 och a1 är där i koden, inte vad g1/a1 kommer vara i framtiden.

Flytta så att m1 och m2 räknas ut efter du tagit in alla värden, så har du löst det.

Permalänk
Medlem

@pv2b: haha va dum man känner sig tack <3

Permalänk
Medlem

Kan man ta bort knapparna från showInputDialog? om inte vad heter OK knappen? Får ju upp du kan ej skriva siffror om man tycker på OK. Skulle hellre vilja att den gav användaren en till chans.

Permalänk
Hedersmedlem
Skrivet av piivo:

Kan man ta bort knapparna från showInputDialog? om inte vad heter OK knappen? Får ju upp du kan ej skriva siffror om man tycker på OK. Skulle hellre vilja att den gav användaren en till chans.

Jag förstår inte vad du menar, kan du förtydliga?

Permalänk
Medlem

@pv2b: showinput dialog har 2 knappar, ok och cancel. Går det att få bort dessa så enbart "text raden" är kvar?