bajas11 Skrevet 17. januar 2010 Del Skrevet 17. januar 2010 (endret) Hei, har nyttopp kasta meg ut i JAVA programmeringen, og har støtt på noen problemer. Det gjelder en converter jeg lager (fra sekunder til timer, minutter og sekunder). Problemet er at når jeg skal få ordene i utskriften til å stemme med tallene. Eks: 2 timer, 1 minutt og 30 sekunder og ikke: 2 time, 1 minutt og 30 sekund Mente det derfor ville være smart med "if-sentinger", men tydligvis fungerer ikke dette, for når jeg tester dette er det kun de to øverste "if-setningene" som fungerer. Noen som vet hvordan dette kan løses, min kode er: import javax.swing.JOptionPane; public class Converter { public static void main( String args[] ) { String navn; String førsteSifferstreng; String total; int førstetall; int time; int restTime; int minutt; int restMinutt; int sekund; navn = JOptionPane.showInputDialog( "Dette er en KBT omgjøringskalkulator! \n" + "Likevel lurer jeg på hva du heter ?" ); // Leser inn første tall fra bruker i form av en sifferstreng: førsteSifferstreng = JOptionPane.showInputDialog("Skriv inn et helt antall sekunder du vil omgjøre til timer, minutter og sekunder" ); // Konverterer sifferstrengene til tallverdier: førstetall = Integer.parseInt( førsteSifferstreng ); // Deler input på 3600 og lagrer summen i variabelen time, da finner jeg timer time = førstetall / 3600; // Bruker % for å finne rest minutter restTime = førstetall % 3600; // Bruker restTime til å finne antall minutter minutt = restTime / 60; // Bruker % for å finne rest sekunder restMinutt = restTime % 60; // Bruker restMinutt til å finne antall sekunder sekund = restMinutt; // If setninger slik at entall til entall, flertall til flertall (ord) total = ""; if ( time == 1 | minutt == 1 | sekund == 1 ) total = time + " time, " + minutt + " minutt og " + sekund + " sekund"; else if ( time != 1 | minutt == 1 | sekund == 1 ) total = time + " timer, " + minutt + " minutt og " + sekund + " sekund"; else if ( time == 1 | minutt != 1 | sekund == 1 ) total = time + " time, " + minutt + " minutter og " + sekund + " sekund"; else if ( time == 1 | minutt == 1 | sekund != 1 ) total = time + " time, " + minutt + " minutt og " + sekund + " sekunder"; else if ( time != 1 | minutt != 1 | sekund == 1 ) total = time + " timer, " + minutt + " minutter og " + sekund + " sekund"; else if ( time == 1 | minutt != 1 | sekund != 1 ) total = time + " time, " + minutt + " minutter og " + sekund + " sekunder"; else if ( time != 1 | minutt == 1 | sekund != 1 ) total = time + " timer, " + minutt + " minutt og " + sekund + " sekunder"; else if ( time != 1 | minutt != 1 | sekund != 1 ) total = time + " timer, " + minutt + " minutter og " + sekund + " sekunder"; else if ( time == 1 | minutt != 1 | sekund != 1 ) total = time + " time, " + minutt + " minutter og " + sekund + " sekunder"; String utregning = førstetall + " sekunder utgjør " + total; String utskrift ="Takk for din oppmerksomhet, " + navn + "\n" + utregning; JOptionPane.showMessageDialog( null, utskrift, "Din kalkulasjon", JOptionPane.PLAIN_MESSAGE); } // slutt på main-metoden } // slutt på klassen Convereter Endret 17. januar 2010 av bajas11 Lenke til kommentar
Unlimited LTD Skrevet 17. januar 2010 Del Skrevet 17. januar 2010 Les if-setningen dine igjen. Fra toppen: Hvis time er 1, eller minutt er 1, eller sekund er 1, gjør noe. Hvis ikke: Hvis time ikke er 1, eller minutt er 1, eller sekund er 1, gjør noe. Det du er ute etter er Hvis time er 1, og minutt er 1, og sekund er 1, gjør noe. | tegnet reperesenterer et logisk eller (altså, dersom en av testene er sanne, returner sann.) For å få et logisk og, bruk && Lenke til kommentar
Gjest Slettet+9871234876134 Skrevet 17. januar 2010 Del Skrevet 17. januar 2010 Hei De IF setningene dine ble bare rot... hvorfor skal du ha med de i det hele tatt? Som regel er ordtaket KISS ("Keep It Simple Stupid") veldig greit å følge Den konverterer jo helt greit uten IF setningene: import javax.swing.JOptionPane; public class Converter { public static void main( String args[] ) { String navn; String førsteSifferstreng; String total; int førstetall; int time; int restTime; int minutt; int restMinutt; int sekund; navn = JOptionPane.showInputDialog( "Dette er en KBT omgjøringskalkulator! \n" + "Likevel lurer jeg på hva du heter ?" ); // Leser inn første tall fra bruker i form av en sifferstreng: førsteSifferstreng = JOptionPane.showInputDialog("Skriv inn et helt antall sekunder du vil omgjøre til timer, minutter og sekunder" ); // Konverterer sifferstrengene til tallverdier: førstetall = Integer.parseInt( førsteSifferstreng ); // Deler input på 3600 og lagrer summen i variabelen time, da finner jeg timer time = førstetall / 3600; // Bruker % for å finne rest minutter restTime = førstetall % 3600; // Bruker restTime til å finne antall minutter minutt = restTime / 60; // Bruker % for å finne rest sekunder restMinutt = restTime % 60; // Bruker restMinutt til å finne antall sekunder sekund = restMinutt; // If setninger slik at entall til entall, flertall til flertall (ord) total = ""; total = time + " time, " + minutt + " minutt og " + sekund + " sekund"; String utregning = førstetall + " sekunder utgjør " + total; String utskrift ="Takk for din oppmerksomhet, " + navn + "\n" + utregning; JOptionPane.showMessageDialog( null, utskrift, "Din kalkulasjon", JOptionPane.PLAIN_MESSAGE); } // slutt på main-metoden } // slutt på klassen Convereter btw, prøv å unngå æ,ø,å i variabelnavn Lenke til kommentar
bajas11 Skrevet 17. januar 2010 Forfatter Del Skrevet 17. januar 2010 (endret) Takk for hjelpen, droppa if-setningene i første omgang men fant en løsning jeg er fornøyd med foreløpig. Bytta alle if setningene med denne koden total = time + " time(r), " + minutt + " minutt(er) og " + sekund + " sekund(er)" KISS regelen var ikke så dum den Endret 17. januar 2010 av bajas11 Lenke til kommentar
quantum Skrevet 18. januar 2010 Del Skrevet 18. januar 2010 (endret) Takk for hjelpen, droppa if-setningene i første omgang men fant en løsning jeg er fornøyd med foreløpig. Bytta alle if setningene med denne koden total = time + " time(r), " + minutt + " minutt(er) og " + sekund + " sekund(er)" KISS regelen var ikke så dum den Det kan være greit å få med seg at logsik OR skriver || og ikke | . Forøvrig har du laget et alternativ for hver kombinasjon av entalls og flertallsformer hos time, minutt og sekund. Det er jo ikke akkurat å gjøre det enkelt, du kan jo prøve å gruble deg fram til hvor mange kombinasjoner du hadde hatt om du skulle hatt med f.eks. dager og hundredeler. Det er hva jeg vil kalle Keep It Stoopid, Stupid! Så har du forslaget om å drite i hele problemstillingen, syns den er mer Keep It Stoopid, Simple, enn KISS. Og da tenker jeg du er passelig forvirra s.a. vi kan se på et forslag til: String timeLabel = "time"; String minuttLabel = "minutt" String sekundLabel = "sekund; if (timer > 1) timeLabel += "er"; if (minutter > 1) minuttLabel += "er"; if (sekunder > 1) sekundLabel += "er"; String total = timer + " " + timeLabel + " " + minutter + " " + minttLabel + " " + sekunder + " " + sekundLabel; Endret 18. januar 2010 av quantum Lenke til kommentar
Patton Skrevet 19. januar 2010 Del Skrevet 19. januar 2010 Det kan være greit å få med seg at logsik OR skriver || og ikke | . Ikke helt riktig. | har to funksjoner, enten som logisk OR eller bitwise operator. || fungerer bare som logisk OR. Forskjellen mellom | og || som logisk OR er at || er en "short circuit" OR, dvs hvis uttrykket til venstre for || er true, da blir uttrykket til høyre for || ikke vurdert. | vurderer begge uttrykken uansett. Lenke til kommentar
quantum Skrevet 19. januar 2010 Del Skrevet 19. januar 2010 Forskjellen mellom | og || som logisk OR er at || er en "short circuit" OR, dvs hvis uttrykket til venstre for || er true, da blir uttrykket til høyre for || ikke vurdert. | vurderer begge uttrykken uansett. Se der lærte jeg noe nytt ... :-) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå