Permalänk

Nytt nybörjarproblem (Java)

Jag sitter och försöker lära mig lite java och har fastnat på en uppgift som jag hittade på nätet.
Man ska skapa lite olika klasser med "Things", "Suitcases", och "Containers" där Things är objekt med namn och vikt som kan lagras i Suitcases som har en maxvikt.
Suitcases can därefter lagras i Containers. Men jag har kört fast på sista deluppgiften där jag ska skapa 100st Suitcases med en st "brick" som har en vikt på 1 och där vikten ökar med +1 för varje ny "brick". Men jag har problem med metoden för att skapa de 100st "suitcaseserna" i Main.

Det är altså detta som jag inte förstår varför det inte funkar:

container.addSuitcase(new Suitcase(100).addThing(new Thing("brick",i)));

Jag får bara felmeddelandet "void type not allowed"

Main:

public class Main { public static void main(String[] args) { Thing brick = new Thing("Brick", 4); Suitcase georgesCase = new Suitcase(10); georgesCase.addThing(brick); Container container = new Container(1000); container.addSuitcase(georgesCase); System.out.println("There are the following things in the container suitcases:"); container.printThings(); } public static void addSuitcasesFullOfBricks(Container container) { for (int i = 1; i <= 100; i++) { container.addSuitcase(new Suitcase(100).addThing(new Thing("brick",i))); } } }

Hjälp-classerna:

public class Thing { private String name; private int weight; public Thing(String name, int weight) { this.name = name; this.weight = weight; } public String getName() { return this.name; } public int getWeight() { return this.weight; } public String toString() { return getName() + " (" + getWeight() + " kg)"; } }

public class Suitcase { private int maxWeight; private ArrayList<Thing> things; private int currentWeight; public Suitcase(int maxWeight) { this.maxWeight = maxWeight; this.things = new ArrayList<Thing>(); this.currentWeight = 0; } public void addThing(Thing thing) { if (this.currentWeight + thing.getWeight() <= this.maxWeight) { this.things.add(thing); this.currentWeight += thing.getWeight(); } } public void printThings() { for (Thing thing : things) { System.out.println(thing); } } public int totalWeight() { return this.currentWeight; } public Thing heaviestThing() { int maxWeight = 0; int indexOfHeaviestThing = 0; if(things.size() == 0){ return null; } else{ for (int i = 0; i < this.things.size(); i++) { if (this.things.get(i).getWeight() > maxWeight) { maxWeight = things.get(i).getWeight(); indexOfHeaviestThing = i; } } return things.get(indexOfHeaviestThing); } } public String toString() { if (things.size() == 0) { return "empty (0 kg)"; } else if (things.size() == 1) { return things.size() + " thing (" + this.currentWeight + " kg)"; } else { return things.size() + " things (" + this.currentWeight + " kg)"; } } }

import java.util.ArrayList; public class Container { private ArrayList<Suitcase> suitcases; private int maxWeight; private int totalWeightOfSuitcases; public Container(int maxWeight) { this.maxWeight = maxWeight; this.suitcases = new ArrayList<Suitcase>(); this.totalWeightOfSuitcases = 0; } public void addSuitcase(Suitcase suitcase) { if (this.totalWeightOfSuitcases + suitcase.totalWeight() <= this.maxWeight) { this.suitcases.add(suitcase); this.totalWeightOfSuitcases += suitcase.totalWeight(); } } public void printThings(){ for(Suitcase s:suitcases){ s.printThings(); } } public String toString() { return this.suitcases.size() + " suitcases (" + totalWeightOfSuitcases + " kg)"; } }

Permalänk
Inaktiv

Du borde skapa objekten i olika uttryck och sen skicka in variablerna i tur och ordning i olika operationer. Tycker att koden blir ful och svårläst av att skriva oneliners.

Det här har min kompis sagt som är erfaren konsult och håller ibland i rekrytering av juniora Java-konsulter.

Permalänk
Medlem

kazen_90 har helt klart en poäng i att man bör undvika sån där kod, men samtidigt så är det förstås lärorikt att ta reda på varför det inte fungerar.

Orsaken till att det inte fungerar är för att du kedjar funktionsanropen, och resultatet av uttrycket är vad det sista anropet i kedjan returnerar.

new Suitcase(100).addThing(new Thing("brick",i))

kommer däremed returnerar vad addThing returnerar, vilket är ingenting (d.v.s. void). Du försöker sedan lägga till detta i container med addSuitcase, vilket kompilatorn förstås protesterar mot. Du kan få detta att fungera genom att låta addThing returnera 'this', men bättre är förstås att dela upp koden så att du inte kedjar anrop så här.

Permalänk
Medlem

Vad du behöver göra är att jobba med loopar för att skapa x antal suitcase-objekt etc.
Du kan exempelvis köra nestade loopar för att skapa X antal "container"-objekt som innehåller Y antal "suitcase"-objekt som i sin tur innehåller Z antal "brick"-objekt med given vikt.

for-loopen är ypperlig för detta.

edit: nvm, läste inte hela din kod. Ser att du kör en loop redan

public static Container GetContainer(int containerMaxWeight, int numSuitcases, int suitcaseMaxWeight, string thingType, int numThings, int thingWeight) { Container container = new Container(containerMaxWeight); for (int i = 1; i <= numSuitcases; i++) { Suitcase suitcase = new Suitcase(suitcaseMaxWeight); for (int j = 1; j <= numThings; j++) { suitcase.addThing(new Thing(thingType, thingWeight)); } container.addSuitcase(suitcase); } return container; }

Inte testkört, men det get dig kanske en liten tanke om hur du kan gå tillväga. Anropa funktionen från main, t.ex.
Container minContainer = GetContainer(100, 100, 1, "Brick", 1, 1)

Permalänk

Tackar för alla svar de uppskattas verkligen.

Nu har jag kört fast igen på en annan uppgift och provar att fråga här igen istället för att spamma forumet med nya trådar.

Detta är uppgiften:

Jag har altså redan en class Dictionary som lagrar ord och dess översättning i en hashmap.

Jag har flera gånger lyckats få någon form av evighetsloop som verkar bero på den kommenterade raden i "TextUserInterface" och jag förstår inte riktigt hur jag ska tänka för att få till det. Men detta är vad jag har än sålänge:

import java.util.Scanner; public class TextUserInterface { private String userInput; private Dictionary dictionary; public TextUserInterface(Scanner reader, Dictionary dicitionary) { //this.userInput = reader.nextLine(); this.dictionary = dicitionary; } public void start() { System.out.println("Statement:\n\tquit - quit the user interface"); while (true) { System.out.println("Statement:"); String input = this.userInput; if (input.equals("quit")) { System.out.println("Cheers!"); break; } else{ System.out.println("Unknown statement"); } } } }

import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class Dictionary { private HashMap<String, String> dictionary; public Dictionary() { this.dictionary = new HashMap<String, String>(); } public String translate(String word) { return (dictionary.get(word) != null) ? dictionary.get(word) : null; } public int amountOfWords() { return this.dictionary.size(); } public void add(String word, String translation) { dictionary.put(word, translation); } public ArrayList<String> translationList() { ArrayList<String> result = new ArrayList<String>(); for (String key : this.dictionary.keySet()) { result.add(key + " = " + dictionary.get(key)); } return result; } }

Permalänk
Medlem

@burton666 Din bild fungerar inte, du verkar inte ha gjort den publik.

Men angående din kod så läser ju den bortkommenterade raden in en textrad från användaren i konstruktorn för TextUserInterface. Om denna rad inte är "quit" så kommer start-metoden att gå in i en oändlig loop. Du går alltså in i en loop med förbestämd data och avslutar endast loopen om denna data har ett visst värde, vilket så klart inte är bra. Vad du troligtvis egentligen vill göra är att läsa in inmatning från användaren i loopen istället, så att loopen får ny data att hantera i varje iteration.

Permalänk

@perost:

Ok, jag vet inte riktigt om jag hängde med men i själva uppgiften var jag tvungen att läsa in Scannern i den ena metoden och använda denna i den andra om jag fattade rätt. Jag har uppdaterat bilden så det går att läsa uppgiften nu.

Permalänk
Medlem
Skrivet av burton666:

Ok, jag vet inte riktigt om jag hängde med men i själva uppgiften var jag tvungen att läsa in Scannern i den ena metoden och använda denna i den andra om jag fattade rätt. Jag har uppdaterat bilden så det går att läsa uppgiften nu.

Enligt uppgiften är det din Scanner du ska spara i klassen, det finns inget krav på att du ska använda den i konstruktorn. Din kod ser förenklat ut ungefär så här just nu:

String input = reader.nextLine(); while (true) { if (input.equals("quit")) { break; } }

Du kan säkert se varför detta kommer resultera i en oändlighetsloop. Du måste flytta in inläsningen så att den sker inne i loopen istället, så att loopen hela tiden får något nytt att hantera.

Permalänk

Ah, tackar nu börjar jag att förstå tillvägagångssättet.

Permalänk

Hej!
Jag håller på med programmering 1 och har kört fast i en uppgift :/ uppgiften går ut på att samla kön och ålder på x antal människor och sedan räkna ut medelålder för könen.
Jag har kommit så här långt men kört fast med while funktionen och lite mera:

import javax.swing.*;

public class Medelp {
public static void main (String[] arg) {
int r1=0;
int r2=0;
String blank=" ";
String t1;
String summa1="Antal män: ";
String summa2="Antal kvinnor: ";
int nr1=JOptionPane.showConfirmDialog(null, "Är du en man?",
"Fråga", JOptionPane.YES_NO_OPTION);
if(nr1==0)
r1=r1+1;
String age1= JOptionPane.showInputDialog(null, "Ålder?");
int p1=Integer.ParseInt(age1);
int nr2=p1/r1;
t1= blank+ nr2;
int nr3=JOptionPane.showConfirmDialog(null, "Vill du mata in mer information?",
"Fråga", JOptionPane.YES_NO_OPTION);
while (true)
{
if (nr3==0)

int nr4=JOptionPane.showConfirmDialog(null, "Är du en kvinna?",
"Fråga", JOptionPane.YES_NO_OPTION);
if(nr1==0)
r2=r2+1;
String age2= JOptionPane.showInputDialog(null, "Ålder?");
int p2=Integer.ParseInt(age2);
int nr5=p2/r2;
t1= blank+ nr4;
}
}

Vore as bussigt om någon skulle kunna putta mig tillbaks på banan Tack på förhand!

Permalänk
Medlem
Skrivet av Svettig finnepinne:

Hej!
Jag håller på med programmering 1 och har kört fast i en uppgift :/ uppgiften går ut på att samla kön och ålder på x antal människor och sedan räkna ut medelålder för könen.
Jag har kommit så här långt men kört fast med while funktionen och lite mera:

Det vore bra om du använde code-taggar ([code​]kod här[/​code]), annars blir din kod väldigt svår att läsa. Jag tog mig friheten att formatera din kod här ifall någon mer vill kommentera:

import javax.swing.*; public class Medelp { public static void main (String[] arg) { int r1=0; int r2=0; String blank=" "; String t1; String summa1="Antal män: "; String summa2="Antal kvinnor: "; int nr1=JOptionPane.showConfirmDialog(null, "Är du en man?", "Fråga", JOptionPane.YES_NO_OPTION); if(nr1==0) r1=r1+1; String age1=JOptionPane.showInputDialog(null, "Ålder?"); int p1=Integer.ParseInt(age1); int nr2=p1/r1; t1= blank+ nr2; int nr3=JOptionPane.showConfirmDialog(null, "Vill du mata in mer information?", "Fråga", JOptionPane.YES_NO_OPTION); while (true) { if (nr3==0) int nr4=JOptionPane.showConfirmDialog(null, "Är du en kvinna?", "Fråga", JOptionPane.YES_NO_OPTION); if(nr1==0) r2=r2+1; String age2= JOptionPane.showInputDialog(null, "Ålder?"); int p2=Integer.ParseInt(age2); int nr5=p2/r2; t1=blank+ nr4; } } }

Men gällande din kod så är det oklart vad du faktiskt vill ha hjälp med. Du avslutar aldrig din while-loop, vilket jag antar är ett problem. Nu vet jag inte hur din uppgift är formulerad, men en tumregel när det gäller programmering är att försöka att aldrig skriva samma kod två gånger. Nu har du ungefär samma kod före loopen som i den, vilket är onödigt. Skriv om koden så att du läser in information från användaren endast i loopen, och avsluta loopen när användaren svarar att den inte vill mata in mer information. Det kan eventuellt vara hjälpsamt att först skriva ner en översikt över programflödet, d.v.s. fundera på vad programmet faktiskt ska göra utan att blanda in Java-detaljer.

Permalänk

@perost: haha, ja, det blev direkt mycket tydligare! tack! precis, har lite svårigheter med hur jag implementerar while funktionen :/

Permalänk

Har jag tänkt rätt med while loopen?

import javax.swing.*;

public class Medelp {
public static void main (String[] arg) {
int r1=0;
int r2=0;
String blank=" ";
String t1;
String summa1="Antal män: ";
String summa2="Antal kvinnor: ";

int start=JOptionPane.showConfirmDialog(null, "Vill du mata in information?",
"Fråga", JOptionPane.YES_NO_OPTION);

while (start==0) {
if(start==1)
break;

int nr1=JOptionPane.showConfirmDialog(null, "Är du en man?",
"Fråga", JOptionPane.YES_NO_OPTION);

if(nr1==0)
r1=r1+1;
else if(nr1==1)
r1=r1+0;
else {
JOptionPane.showMessageDialog(null, "Beräkningen avbryten");
System.exit(0);
}

String age1=JOptionPane.showInputDialog(null, "Ålder?");
int p1=Integer.ParseInt(age1);
int nr2=p1/r1;
t1= blank+ nr2;

int nr4=JOptionPane.showConfirmDialog(null, "Är du en kvinna?",
"Fråga", JOptionPane.YES_NO_OPTION);

if(nr1==0)
r2=r2+1;

String age2= JOptionPane.showInputDialog(null, "Ålder?");
int p2=Integer.ParseInt(age2);
int nr5=p2/r2;
t1=blank+ nr4;
}
}
}

Permalänk
Medlem

Hejsan alla kodare! Är helt ny på det här med java programmering, har börjat studera och tycker jag hänger med hyfsat vid kodgenomgång men när jag ställs inför att att lösa en uppgift med att koda så har jag svårt att få ihop det. Jag tycker just det här med metoder är rörigt. Hur man deklarerar metoden rätt inför uppgiften och sen rätt typ av anrop.

Jag ska skapa ett program som via en meny ska ge användaren fyra val.
1: Addera två tal
2: Räkna bokstäver i en sträng
3: Spegelvänd en sträng
4: Summera alla tal i en sträng

Jag har tänkt att göra en metod för varje val och eftersom jag behöver hämta info från användaren så ska jag använda Scanner. Men hur jag ska koppla ihop Scanner med rätt deklarerade variabler och metoderna med anrop?
Kan någon ge exempel på hur jag ska tänka, det är rundgång i skallen nu.

Hoppas någon har tid att svara snarast.... //Bikerrog

Permalänk
Skrivet av bikerrog:

Hejsan alla kodare! Är helt ny på det här med java programmering, har börjat studera och tycker jag hänger med hyfsat vid kodgenomgång men när jag ställs inför att att lösa en uppgift med att koda så har jag svårt att få ihop det. Jag tycker just det här med metoder är rörigt. Hur man deklarerar metoden rätt inför uppgiften och sen rätt typ av anrop.

Jag ska skapa ett program som via en meny ska ge användaren fyra val.
1: Addera två tal
2: Räkna bokstäver i en sträng
3: Spegelvänd en sträng
4: Summera alla tal i en sträng

Jag har tänkt att göra en metod för varje val och eftersom jag behöver hämta info från användaren så ska jag använda Scanner. Men hur jag ska koppla ihop Scanner med rätt deklarerade variabler och metoderna med anrop?
Kan någon ge exempel på hur jag ska tänka, det är rundgång i skallen nu.

Hoppas någon har tid att svara snarast.... //Bikerrog

För ettan så kan du välja typ String val1 = scan.next(); om det är rätt har inte programmet öppet just nu men har minne av att det ska stå så. och för andra valet blir det då val2 = scan.next();

I andra får du räkna hela meningen,ta bort alla mellanslag etc och sen räkna ut totala bokstäver.
Trean får du ta sista bokstaven och lägga först istället. Tror du måste skapa en variabel för strängen och en för den omvända.

Fyran hm den kan jag inte svara på rakt upp och ned iallafall

Permalänk
Medlem

@ZalamanderRelic: Tack för snabbt svar, hjälpte mig tyvärr inte.

Har börjat göra om tankarna om hur det ska va till kod, men når inte hela vägen...

import java.util.Scanner;
public class Lab {
public static void main(String[] args) {
System.out.println("Vad vill du göra?");
System.out.println("1. Addera två tal");
System.out.println("2. Räkna bokstäver i en sträng");
System.out.println("3. Spegelvänd en sträng");
System.out.println("4. Summera alla tal i en sträng");

int choise;
switch (choise){
case 0: add(firstNumber, addSecondNumber)
break;
case 1: countLetters()
break;
case 2: reverseString()
break;
case 3: sumAllNumbersInString()
break;

}

Scanner sc = new Scanner(System.in);
int firstNumber = sc.nextInt();
int addSecondNumber = sc.nextInt();

}

public static int add(int firstNumber + int addSecondnumber){

}
public static String countLetters(){

}
public static String reverseString(){

}
public static ????? sumAllNumbersInString(){

}

}

Permalänk

@bikerrog:
Tänkte något liknande som detta. Blev lite svengelska men lade inte tid på den delen direkt

import java.util.Scanner; public class MenyVal { static Scanner scan = new Scanner(System.in); static void addTwoNumbers(){ System.out.println("Första nummer"); double siffra1 = scan.nextDouble(); System.out.println("Andra nummer"); double siffra2 = scan.nextDouble(); double sum = siffra1 + siffra2; System.out.println(sum); } public static void main(String[]args){ System.out.println("Vad vill du göra?" + "\n1. Addera två tal" + "\n2. Räkna bokstäver i en sträng" + "\n3. Spegelvänd en sträng" + "\n4. Summera alla tal i en sträng"); int val = scan.nextInt(); switch(val){ case 1: addTwoNumbers(); } } }

Permalänk
Medlem
Skrivet av bikerrog:

Hejsan alla kodare! Är helt ny på det här med java programmering, har börjat studera och tycker jag hänger med hyfsat vid kodgenomgång men när jag ställs inför att att lösa en uppgift med att koda så har jag svårt att få ihop det. Jag tycker just det här med metoder är rörigt. Hur man deklarerar metoden rätt inför uppgiften och sen rätt typ av anrop.

Kan någon ge exempel på hur jag ska tänka, det är rundgång i skallen nu.

Så blir det för nästan alla. Man måste sätta sig och koda och prova sig fram, sedan kan man finlira till det efteråt.

Jag hade väl börjat med att skapa själva inmatningsdelen. Det vill säga så att du kommer in i rätt del av programmet för varje alternativ du skriver in. När du har gjort det kan du bara skapa metoderna du har punktat upp en och en. Hur man gör detta är ju helt upp till en själv faktiskt, det finns så många sätt man kan göra det på.

Här är ett exempel:

public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("1. Addera två tal"); System.out.println("2. Räkna bokstäver i en sträng"); System.out.println("3. Spegelvänd en sträng"); System.out.println("4. Summera alla tal i en sträng"); boolean done = false; while (!done) { System.out.println("\nVad vill du göra?: "); int choice = 0; // Få indata för menyvalet if (scan.hasNextInt()) { choice = scan.nextInt(); scan.nextLine(); // Konsumera newline efter den har tagit siffran så att ny data kan hämtas } else scan.next(); String str; switch (choice) { case 1: System.out.println("Val ETT är valt..."); break; case 2: System.out.println("Val TVÅ är valt..."); break; case 3: System.out.println("Val TRE är valt, skriv en sträng: "); str = scan.nextLine(); System.out.println("Du skrev: " + str); break; case 4: System.out.println("Val FYRA är valt..."); break; default: System.out.println("Inkorrekt val!"); } } }

Nu min uppmaning till dig, försök skapa följande metoder och posta här hur du gjorde.

int add(int a, int b) { // returnera summan av a och b } int countLetters(String str) { // returnera antalet bokstäver i str } String reverse(String str) { // returnera str baklänges } int sumLetters(String str) { // returnera summan av alla siffror i strängen str }

Permalänk
Medlem

Tack snälla för era svar! Ska inte ge upp än....

//Bikerrog

Permalänk

Hej!
Kan någon hjälpa mig att kolla vad jag gjort fel och om jag tänkt rätt med while loopen? Uppgiften går ut på att samla information om kön och ålder för att sedan i slutet få medelåldern på könen. När jag försöker kompilera så får jag felmeddelandet att t1+t2 ej kan hittas och att det är något fel med Integer.ParseInt.

import javax.swing.*;

public class Medelp2 {
public static void main (String[] arg) {
int r1=0;
int r2=0;
String blank=" ";
String t1;
String summa1="Antal män: ";
String summa2="Antal kvinnor: ";

int start=JOptionPane.showConfirmDialog(null, "Vill du mata in information?",
"Fråga", JOptionPane.YES_NO_OPTION);

while (start==0) {
if(start==1)
break;

int nr1=JOptionPane.showConfirmDialog(null, "Är du en man?",
"Fråga", JOptionPane.YES_NO_OPTION);

if(nr1==0)
r1=r1+1;
else if(nr1==1)
r1=r1+0;
else {
JOptionPane.showMessageDialog(null, "Beräkningen avbryten");
System.exit(0);
}

String age1=JOptionPane.showInputDialog(null, "Ålder?");
int p1=Integer.ParseInt(age1);
int nr2=p1/r1;
t1= blank+ nr2;

int nr4=JOptionPane.showConfirmDialog(null, "Är du en kvinna?",
"Fråga", JOptionPane.YES_NO_OPTION);

if(nr4==0)
r2=r2+1;
else if(nr4==1)
r1=r1+0;
else {
JOptionPane.showMessageDialog(null, "Beräkningen avbryten");
System.exit(0);
}

String age2= JOptionPane.showInputDialog(null, "Ålder?");
int p2=Integer.ParseInt(age2);
int nr5=p2/r2;
t2=blank+ nr5;

}

JOptionPane.showMessageDialog(null, "Antalet män: " + r + "Vars medelålder är: " + t1 +
"\nAntalet kvinnor: " + r2 + "Vars medelålder är: " + t2);
System.exit(0);

}
}

Permalänk

@Svettig finnepinne: Litet p i parseInt();
sen finns inte t2 och r som variablar

Permalänk

@ZalamanderRelic: Tack! Nu fick jag felmeddelandet: variable t1 might not have been initialized. samma på t2. Vad betyder det?

Permalänk
Skrivet av Svettig finnepinne:

@ZalamanderRelic: Tack! Nu fick jag felmeddelandet: variable t1 might not have been initialized. samma på t2. Vad betyder det?

På string måste du göra String t1 = ""; men du ska räkna antalet män och kvinnor så använd int samt bättre benämningar

Skickades från m.sweclockers.com

Permalänk

@ZalamanderRelic: Förlåt, jag hänger inte med :/ antalet män sparas i r1 som jag deklarerat som int och samma med kvinnor i r2. Tacksam för all hjälp!

Permalänk
Skrivet av Svettig finnepinne:

@ZalamanderRelic: Förlåt, jag hänger inte med :/ antalet män sparas i r1 som jag deklarerat som int och samma med kvinnor i r2. Tacksam för all hjälp!

Medelålder menade jag såklart. Står på tåget skyller på det
T1 och t2 bör t om vara en double

Skickades från m.sweclockers.com

Permalänk

@ZalamanderRelic: Ok bytte till int men nu säger den att symbol t1 och t2 cannot find symbol

Permalänk
Skrivet av Svettig finnepinne:

@ZalamanderRelic: Ok bytte till int men nu säger den att symbol t1 och t2 cannot find symbol

Posta koden du har nu

Skickades från m.sweclockers.com

Permalänk

@ZalamanderRelic:
import javax.swing.*;

public class Medelp2 {
public static void main (String[] arg) {
int r1=0;
int r2=0;
String blank="";
//String t1;
//String t2;
String summa1="Antal män: ";
String summa2="Antal kvinnor: ";

int start=JOptionPane.showConfirmDialog(null, "Vill du mata in information?",
"Fråga", JOptionPane.YES_NO_OPTION);

while (start==0) {
if(start==1)
break;

int nr1=JOptionPane.showConfirmDialog(null, "Är du en man?",
"Fråga", JOptionPane.YES_NO_OPTION);

if(nr1==0)
r1=r1+1;
else if(nr1==1)
r1=r1+0;
else {
JOptionPane.showMessageDialog(null, "Beräkningen avbryten");
System.exit(0);
}

String age1=JOptionPane.showInputDialog(null, "Ålder?");
int p1=Integer.parseInt(age1);
int nr2=p1/r1;
int t1= nr2;

int nr4=JOptionPane.showConfirmDialog(null, "Är du en kvinna?",
"Fråga", JOptionPane.YES_NO_OPTION);

if(nr4==0)
r2=r2+1;
else if(nr4==1)
r1=r1+0;
else {
JOptionPane.showMessageDialog(null, "Beräkningen avbryten");
System.exit(0);
}

String age2= JOptionPane.showInputDialog(null, "Ålder?");
int p2=Integer.parseInt(age2);
int nr5=p2/r2;
int t2= nr5;

}

JOptionPane.showMessageDialog(null, "Antalet män: " + r1 + "Vars medelålder är: " + t1 +
"\nAntalet kvinnor: " + r2 + "Vars medelålder är: " + t2);
System.exit(0);

}
}

Permalänk
Skrivet av Svettig finnepinne:

@ZalamanderRelic:

import javax.swing.*; public class Medelp2 { public static void main (String[] arg) { int r1=0; int r2=0; String blank=""; //String t1; //String t2; String summa1="Antal män: "; String summa2="Antal kvinnor: "; int start=JOptionPane.showConfirmDialog(null, "Vill du mata in information?", "Fråga", JOptionPane.YES_NO_OPTION); while (start==0) { if(start==1) break; int nr1=JOptionPane.showConfirmDialog(null, "Är du en man?", "Fråga", JOptionPane.YES_NO_OPTION); if(nr1==0) r1=r1+1; else if(nr1==1) r1=r1+0; else { JOptionPane.showMessageDialog(null, "Beräkningen avbryten"); System.exit(0); } String age1=JOptionPane.showInputDialog(null, "Ålder?"); int p1=Integer.parseInt(age1); int nr2=p1/r1; int t1= nr2; int nr4=JOptionPane.showConfirmDialog(null, "Är du en kvinna?", "Fråga", JOptionPane.YES_NO_OPTION); if(nr4==0) r2=r2+1; else if(nr4==1) r1=r1+0; else { JOptionPane.showMessageDialog(null, "Beräkningen avbryten"); System.exit(0); } String age2= JOptionPane.showInputDialog(null, "Ålder?"); int p2=Integer.parseInt(age2); int nr5=p2/r2; int t2= nr5; } JOptionPane.showMessageDialog(null, "Antalet män: " + r1 + "Vars medelålder är: " + t1 + "\nAntalet kvinnor: " + r2 + "Vars medelålder är: " + t2); System.exit(0); } }

du har tagit bort String t1; och även t2. Sätt int t1 = 0; och int t2 = 0; för du ska räkna medelålder och antingen använder du då int t1 och t2 men då blir det heltal division eller så kör du double för att få mer exakt. sen så blir det null på rad 50 och går inte att avbryta programmet på rätt sätt heller. Är detta programmering 1 B uppgift du gör?

Permalänk

@ZalamanderRelic: Yes, programmering 1