[Java] Loopade resultat i samma meddelande ruta

Permalänk
Medlem

[Java] Loopade resultat i samma meddelande ruta

Hej!

Håller på med en uppgift som går ut på att ta fram olika till jämna heltal.
Jag har löst det på följande sätt:

import javax.swing.*; public class test{ public static void main (String[] args){ while (true) { String s = JOptionPane.showInputDialog(null, "Skriv ett jämnt tal > 2"); if (s == null){ System.out.println("Stänger av"); /* Körs ej vid udda tal*/ } int n = Integer.parseInt(s); if (n <= 2 || n%2 != 0){ JOptionPane.showMessageDialog(null, "Försök igen"); } { } } } public static string koll (int variabel) { for (int i = 2; i < variabel/2 +1 ; i++){ if (tal(i)){ int var = variabel - i; if (tal (var)){ } } } } /* Kontroll av tal */ public static boolean tal(int talet){ for (int i = 2; i < talet; i++) if (talet % i == 0){ return false; } return true; } }

Programmet tar fram de rätta alternativen dock presenteras de i olika meddelanderutor istället för att skriva de olika summorna under varandra i en och samma ruta. Mitt problem består i att jag inte vet hur denna sträng ska byggas upp.

Permalänk
Medlem
Skrivet av Evoedde:

Hej!

Håller på med en uppgift som går ut på att ta fram olika talkombinationer till jämna heltal.
Jag har löst det på följande sätt:

import javax.swing.*; public class test{ public static void main (String[] args){ while (true) { String s = JOptionPane.showInputDialog(null, "Skriv ett jämnt tal > 2"); if (s == null){ System.out.println("Stänger av"); /* Körs ej vid udda tal*/ } int n = Integer.parseInt(s); if (n <= 2 || n%2 != 0){ JOptionPane.showMessageDialog(null, "Försök igen"); } { Primkoll (n); } } } public static void Primkoll (int variabel){ for (int i = 2; i < variabel/2 +1 ; i++){ if (primtal(i)){ int var = variabel - i; if (primtal (var)){ JOptionPane.showMessageDialog(null, i + " + " + var ); } } } } /* Kontroll av primtal */ public static boolean primtal(int talet){ for (int i = 2; i < talet; i++) if (talet % i == 0){ return false; } return true; } }

Programmet tar fram de rätta kombinationerna dock presenteras de i olika meddelanderutor istället för att skriva de olika summorna under varandra i en och samma ruta. Som tips till uppgiften står det "Bygg därför upp resultatet som en lång text och lägg in \n efter varje summa.". Mitt problem består i att jag inte vet hur denna sträng ska byggas upp.

Det enklaste sättet, utan att modifiera för mycket av redan existerande kod, som jag kan komma på är detta:

import javax.swing.*; public class test{ public static void main (String[] args){ while (true) { String s = JOptionPane.showInputDialog(null, "Skriv ett jämnt tal > 2"); if (s == null){ System.out.println("Stänger av"); /* Körs ej vid udda tal*/ } int n = Integer.parseInt(s); if (n <= 2 || n%2 != 0){ JOptionPane.showMessageDialog(null, "Försök igen"); } { JOptionPane.showMessageDialog(null, Primkoll(n)); //Presenterar allt i en ruta. } } } public static string Primkoll (int variabel) { string buffer = ""; //Buffer, som vi sparar all text i for (int i = 2; i < variabel/2 +1 ; i++){ if (primtal(i)){ int var = variabel - i; if (primtal (var)){ buffer += "i + " + " + var + "\n").toString(); //Bygger variabeln buffer, för varje loop. Snyggare att använda StringBuilder/StringBuffer, eller vad klassen nu heter i Java... :) } } } return buffer; //Returnerar variabeln buffer när loopen är klar } /* Kontroll av primtal */ public static boolean primtal(int talet){ for (int i = 2; i < talet; i++) if (talet % i == 0){ return false; } return true; } }

Jag har kommenterat raderna som är förändrade/nya.

Jag har inte kompilerat/testat koden, så jag reserverar mig för eventuella fel.

Råkade skriva: return &quot;buffer&quot;;
Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Det enklaste sättet, utan att modifiera för mycket av redan existerande kod, som jag kan komma på är detta:

import javax.swing.*; public class test{ public static void main (String[] args){ while (true) { String s = JOptionPane.showInputDialog(null, "Skriv ett jämnt tal > 2"); if (s == null){ System.out.println("Stänger av"); /* Körs ej vid udda tal*/ } int n = Integer.parseInt(s); if (n <= 2 || n%2 != 0){ JOptionPane.showMessageDialog(null, "Försök igen"); } { JOptionPane.showMessageDialog(null, Primkoll(n)); //Presenterar allt i en ruta. } } } public static string Primkoll (int variabel) { string buffer = ""; //Buffer, som vi sparar all text i for (int i = 2; i < variabel/2 +1 ; i++){ if (primtal(i)){ int var = variabel - i; if (primtal (var)){ buffer += "i + " + " + var + "\n").toString(); //Bygger variabeln buffer, för varje loop. Snyggare att använda StringBuilder/StringBuffer, eller vad klassen nu heter i Java... :) } } } return buffer; //Returnerar variabeln buffer när loopen är klar } /* Kontroll av primtal */ public static boolean primtal(int talet){ for (int i = 2; i < talet; i++) if (talet % i == 0){ return false; } return true; } }

Jag har kommenterat raderna som är förändrade/nya.

Jag har inte kompilerat/testat koden, så jag reserverar mig för eventuella fel.

På Java-sidan börjar alla klasser med stor bokstav. Det ska med andra ord vara String!

Det är egentligen (och precis som du säger märker jag ) mer Java-idiomt att använda en StringBuilder om man vill bygga sin sträng bit för bit, fast det kommer märkas 0 skillnad när inmatningen är det som tar tid.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

På Java-sidan börjar alla klasser med stor bokstav. Det ska med andra ord vara String!

Det är egentligen (och precis som du säger märker jag ) mer Java-idiomt att använda en StringBuilder om man vill bygga sin sträng bit för bit, fast det kommer märkas 0 skillnad när inmatningen är det som tar tid.

Jag tänkte som jag gör i C# som har alias för alla klasser i System-namespacet.
Jag skrev i alla fall StringBuilder med stor bokstav!

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Tackar så mycket nu funkar som det ska det ska! Fick bara ändra om bland situationstecknena då variablerna tolkades som textsträngar.