Gå til innhold

[Løst]else if setninger?


Anbefalte innlegg

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 av bajas11
Lenke til kommentar
Videoannonse
Annonse

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

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

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 av bajas11
Lenke til kommentar
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 av quantum
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...