Gå til innhold

Metode for å redusere if-statements


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet

Det er bare å bruke and() statement. Dvs

 

if ( and(time != 1;minutt != 1;sekund != 1) {

// enelleranna kode

}

 

Nå er det en stund siden jeg holdt på med java, men jeg gjetter på semikolon som separator, men kan være komma óg.

Skrevet

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);

Skrevet (endret)

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
Skrevet (endret)

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
Skrevet

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 :)

Skrevet

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().

Skrevet (endret)

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
Skrevet

Det er nok bare kunnskapene mine som kommer til kort, har ikke lært om return, static, og String(med argumenter) ennå. Jeg skjønner nok mer om en ukes tid eller noe. Tusen takk for tilbakemeldinger :)

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...