Gå til innhold

Metode for å redusere if-statements


Anbefalte innlegg

Hei!

Jeg fikk en oppgave på skolen om å lage et program som gjorde x ant sekunder om til timer, minutter og sekunder, og det er greit nok. Jeg ville prøve å få til at om det var kun feks ett sekund ( "Det er 3 timer, 13 minutter og 1 sekund" ) så skal det stå sekund i stedet for sekunder.

 

Så det jeg lurer på er vel om det er en annen metode jeg skulle bruke for å få til dette, da jeg syns det ble veldig rotete og langt, selv om det fungerte.

 

Takker for svar!

 

her er forresten koden, begynte å kode for to dager siden så sikkert noen rare metoder etc =)

import javax.swing.JOptionPane;
public class Oppg5
{
public static void main(String[] args)
{
String sek;
int ant, time, minutt, sekund;
sek = JOptionPane.showInputDialog( "Antall sekunder: " );
ant = Integer.parseInt( sek );
time= ant / 3600;
minutt = (ant % 3600) / 60;
sekund = ant - ((time * 3600) + (minutt * 60));
if (time != 1)
{
if (minutt != 1)
{
if (sekund != 1)
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutter og " +sekund + " sekunder!" );
}
else
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutter og " +sekund + " sekund!" );
}
}
else
{
if (sekund != 1)
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutt og " +sekund + " sekunder!" );
}
else
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutt og " +sekund + " sekund!" );
}
}
}
else
{
if (minutt != 1)
{
if (sekund != 1)
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " time, " +minutt + " minutter og " +sekund + " sekunder!" );
}
else
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " time, " +minutt + " minutter og " +sekund + " sekund!" );
}
}
else
{
if (sekund != 1)
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " time, " +minutt + " minutt og " +sekund + " sekunder!" );
}
else
{
JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutt og " +sekund + " sekund!" );
}
}
}
}
}

 

edit: code tags

Endret av perpers
Lenke til kommentar
Videoannonse
Annonse

Se

Hei!

Jeg fikk en oppgave på skolen om å lage et program som gjorde x ant sekunder om til timer, minutter og sekunder, og det er greit nok. Jeg ville prøve å få til at om det var kun feks ett sekund ( "Det er 3 timer, 13 minutter og 1 sekund" ) så skal det stå sekund i stedet for sekunder.

 

Så det jeg lurer på er vel om det er en annen metode jeg skulle bruke for å få til dette, da jeg syns det ble veldig rotete og langt, selv om det fungerte.

 

Takker for svar!

 

her er forresten koden, begynte å kode for to dager siden så sikkert noen rare metoder etc =)

 

import javax.swing.JOptionPane;

public class Oppg5

{

public static void main(String[] args)

{

String sek;

int ant, time, minutt, sekund;

sek = JOptionPane.showInputDialog( "Antall sekunder: " );

ant = Integer.parseInt( sek );

time= ant / 3600;

minutt = (ant % 3600) / 60;

sekund = ant - ((time * 3600) + (minutt * 60));

if (time != 1)

{

if (minutt != 1)

{

if (sekund != 1)

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutter og " +sekund + " sekunder!" );

}

else

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutter og " +sekund + " sekund!" );

}

}

else

{

if (sekund != 1)

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutt og " +sekund + " sekunder!" );

}

else

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutt og " +sekund + " sekund!" );

}

}

}

else

{

if (minutt != 1)

{

if (sekund != 1)

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " time, " +minutt + " minutter og " +sekund + " sekunder!" );

}

else

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " time, " +minutt + " minutter og " +sekund + " sekund!" );

}

}

else

{

if (sekund != 1)

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " time, " +minutt + " minutt og " +sekund + " sekunder!" );

}

else

{

JOptionPane.showMessageDialog( null, ant + " sekunder = " +time + " timer, " +minutt + " minutt og " +sekund + " sekund!" );

}

}

}

}

}

 

Dette er en minimal forbedring, forstår du denne:

String s = ant + " sekunder = ";
  if (time != 1) {
	 s += time + " timer, ";
  } else {
	 s += time + " time, ";
  }
  if (minutt != 1) {
	 s += minutt + " minutter og ";
  } else {
	 s += minutt + " minutt og ";
  }
  if (sekund != 1) {
	 s += sekund + " sekunder!";
  } else {
	 s += sekund + " sekund!";
  }
  JOptionPane.showMessageDialog(null, s);

Lenke til kommentar

Har ikke Java en "conditional operator", som lar deg si noe sånt som

 

s += time + " time" + (time == 1 ? ", " : "r, ");

s += minute + " minutt" + (minutt == 1 ? " og " : "er og ");

s += sekund + " sekund" + (time == 1 ? "!" : "er!");

JOptionPane.showMessageDialog(null, s);

 

Edit: Altså: "Hvis time er lik 1, velg første alternativ etter spørsmålstegnet, hvis ikke velg det andre."

 

Geir :)

Endret av tom waits for alice
Lenke til kommentar

String Flertallifiser(int tall, String navn)
{
 return tall.toString() + " " + tall == 1 ? navn : (navn + navn.endsWith("e") ? "r" : "er");
}

String TallifyTid(int timer, int minutter, int sekunder)
{
 return Flertallifiser(timer, "time") + ", " + Flertallifiser(minutter, "minutt") + " og " + Flertallifiser(sekunder, "sekund") + "!"
}

edit: Stor S i String

Endret av GeirGrusom
Lenke til kommentar

Dette er en minimal forbedring, forstår du denne:

String s = ant + " sekunder = ";
  if (time != 1) {
	 s += time + " timer, ";
  } else {
	 s += time + " time, ";
  }
  if (minutt != 1) {
	 s += minutt + " minutter og ";
  } else {
	 s += minutt + " minutt og ";
  }
  if (sekund != 1) {
	 s += sekund + " sekunder!";
  } else {
	 s += sekund + " sekund!";
  }
  JOptionPane.showMessageDialog(null, s);

 

Denne var jo mye bedre :) Takk! Skal prøve å finne ut hvordan den virker =)

 

Prøvde å sette inn koden til GeirGrusom :

String Flertallifiser(int tall, String navn)
{
 return tall.toString() + " " + tall == 1 ? navn : (navn + navn.endsWith("e") ? "r" : "er");
}
String TallifyTid(int timer, int minutter, int sekunder)
{
 return Flertallifiser(timer, "time") + ", " + Flertallifiser(minutter, "minutt") + " og " + Flertallifiser(sekunder, "sekund") + "!"

 

men det fikk jeg ikke til.

 

Takk for hjelp :)

Lenke til kommentar

Jeg skrev det på frihånd, men ser ikke noe galt med det jeg har skrevet.

 

import javax.swing.JOptionPane;
public class Oppg5
{
 static String Flertallifiser(int tall, String navn)
 {
   return tall.toString() + " " + tall == 1 ? navn : (navn + navn.endsWith("e") ? "r" : "er");
 }
 static String TallifyTid(int timer, int minutter, int sekunder)
 {
   return Flertallifiser(timer, "time") + ", " + Flertallifiser(minutter, "minutt") + " og " + Flertallifiser(sekunder, "sekund") + "!"
 }

 public static void main(String[] args)
 {
   JOptionPane.showMessageDialog(null, TallifyTid(5, 1, 2));
 }
}

 

Burde gi en message box som sier "5 timer, 1 minutt og 2 sekunder" dersom du kaller Hallo().

Lenke til kommentar

Litt avhengig om du vil være sikker på begrensningen til metoden (f.eks natt/netter) eller ikke kan du også bruke enum

 

private static enum Type {
	MIN, HRS, SEC
};
private static String flertallifiser(int amount, Type t) {
	switch (t) {
	case MIN:
		return "minutt" + (amount != 1 ? "er" : "");
	case HRS:
		return "time" + (amount != 1 ? "r" : "");
	case SEC:
		return "sekund" + (amount != 1 ? "er" : "");
	}
	return ""; // throw new shouldNeverHappenException();
}

 

kall med flertallifiser(minutter, Type.MIN);

 

edit:typo

Endret av Kiff
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å
×
×
  • Opprett ny...