ηλί, ηλί, λαμά σαβαχθανί!?
[Java] Loopade resultat i samma meddelande ruta
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.
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.
Kom-pa-TI-bilitet
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!
ηλί, ηλί, λαμά σαβαχθανί!?
Tackar så mycket nu funkar som det ska det ska! Fick bara ändra om bland situationstecknena då variablerna tolkades som textsträngar.
- Idag Sony läcker uppgifter i rättegång – så stort är Call of Duty 9
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 37
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 46
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Igår Nvidias nästa arkitektur för Geforce kommer år 2025 58
- Igår Veckans fråga: Vilket operativsystem föredrar du? 83
- Igår Bilar med smarta inslag ger fler dumma fel 63
- 27 / 6 Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år" 88
- 26 / 6 Lastpass-användare rasar – kan inte logga in 59
- 26 / 6 Inet frågar SweClockers – Vad skulle du vilja förbättra på Inet.se? 53
- Ert dyraste ” datormisstag”?403
- Framtiden för C# och .Net i Sverige47
- Mekaniska tangentbord och tillbehör, allmän diskussion och frågor.6379
- Elbilar - Tråden för intresserade20459
- Strul med win 11 (och StartAllBack?)9
- iMac visar inte innehåller i extern HDD5
- Borra i betongvägg60
- Skulle behöva lite hjälp med val av utbildning!19
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"37
- Föra över mini DV till datorn via Firewire DV - USB0
- Säljes I5 12500
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Säljes Star Wars Jedi AMD kod
- Säljes Trasig Xiaomi Mi Electric Scooter (M365) Svart
- Säljes 5800x3D + x570 Meg Unify + be quiet! Dark Rock Slim
- Säljes AMD ASUS DUAL RX6700XT
- Säljes Dell OptiPlex 7010
- Säljes Datordelar: i5 9600k + 1070 GTX mm.
- Säljes 1080 TI | Vattenblock | 1TB SSD | Apple Watch 4 Stainless | Hörlurar | Mikrofon
- Säljes Intressekoll: Xbox Series S 512Gb samt Switch Oled 64Gb Vit
- Sony läcker uppgifter i rättegång – så stort är Call of Duty9
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"37
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare46
- Veckans fråga: Vilket operativsystem föredrar du?82
- Bilar med smarta inslag ger fler dumma fel63
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
- Microsoft vill strömma Windows från molnet72
- Starfield utvecklas med AMD:s välsignelse153
- Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år"88
Externa nyheter
Spelnyheter från FZ
- Över tre miljoner exemplar av Final Fantasy XVI har skeppats och sålts idag
- Sony råkar avslöja spelbudgetar och annat på grund av dålig märkpenna idag
- Alan Wake och CoD: Kallt krig snart på PS Plus igår
- Red Dead Redemption åldersmärkt igen i Korea – det spekuleras i remaster igår
- Fallout London flyttas för att slippa Starfield-konkurrensen igår