Gå til innhold

Anbefalte innlegg

Har nylig begynt å programmere

Har programmert et mattestykke der man har en startsum, en rente og hvor mye man bruker i måneden.

Poenget her er at brukeren skal skrive inn de forskjellige faktorene selv.

Men jeg trenger begrensninger på:

 - Renten, så den ikke blir for høy

 - Totalsummen, i tilfelle brukeren bruker for lite i måneden og startsummen bare vil øke.

 

Problemet mitt er at jeg vet ikke hvordan jeg setter begrensninger i java.

Hvis noen kan gi meg en eller fler koder jeg kunne brukt i denne hadde det vært til stor hjelp.

Lenke til kommentar
Videoannonse
Annonse

Har nylig begynt å programmere

Har programmert et mattestykke der man har en startsum, en rente og hvor mye man bruker i måneden.

Poenget her er at brukeren skal skrive inn de forskjellige faktorene selv.

Men jeg trenger begrensninger på:

 - Renten, så den ikke blir for høy

 - Totalsummen, i tilfelle brukeren bruker for lite i måneden og startsummen bare vil øke.

 

Problemet mitt er at jeg vet ikke hvordan jeg setter begrensninger i java.

Hvis noen kan gi meg en eller fler koder jeg kunne brukt i denne hadde det vært til stor hjelp.

 

Legg ut koden din så er det lettere å komme med forslag. 

Lenke til kommentar

import java.util.Scanner;

class ForsteProgram
{
  public static void main(String[]args)
  {
    Scanner in = new Scanner(System.in);
    System.out.print("Write the starting sum for your account: ");
    float orgSum = in.nextFloat();
    System.out.print("How much do you intend to spend mounthly: ");
    int mSpent = in.nextInt();
    
    //System.out.print("The current rent a year: ");
    //double cRent = in.nextDouble();
    int goEmpty = 0;
    while (orgSum > 0)
    {
        orgSum = (float)(orgSum * 1.005 - mSpent);
        goEmpty = (goEmpty + 1);
    }
    if (goEmpty <= 1)
    {
      System.out.println("If you keep that up, you will have money forever. PS we dont count taxes");
    }
    else
    {
      System.out.println("It will take " + goEmpty + " mounths before run out of money");
    }
  }
}

 

 

- har ikke laget at du kan skrive inn rente selv enda

- hvis brukeren skriver f.eks. 1 på hvor mye m. blir det uendelig

- Er sikkert et par andre feil, men det retter jeg opp som jeg går

Endret av PrøverlittJava
Lenke til kommentar

Her er en måte å løse det på, bare spør om du vil ha forklaring på noe.

import java.util.Scanner;

class ForsteProgram {

   private final static Scanner IN = new Scanner(System.in);

   private final static double MAX_RENT = 25.0;

   private static double getDoubleUserInput(Double min, Double max) {
      double result = IN.nextDouble();
      while ((min != null && result < min) || (max != null && result > max)) {
         if (min == null)
            System.out.print("Value too large (max = " + max + "), try again: ");
         else if (max == null)
            System.out.print("Value too small (min = " + min + "), try again: ");
         else
            System.out.print("Value outside valid range (" + min + ".." + max + "), try again: ");
         result = IN.nextDouble();
      }
      return result;
   }

   public static void main(String[]args) {
      System.out.print("Write the starting sum for your account: ");
      double orgSum = getDoubleUserInput(null, null);
      System.out.print("How much do you intend to spend mounthly: ");
      double mSpent = getDoubleUserInput(0.0, null);
      System.out.print("The current rent a year: ");
      double cRent = getDoubleUserInput(0.0, MAX_RENT);
      int months = 0;
      double newSum = orgSum;
      while (newSum > 0.0) {
         newSum = newSum * Math.pow(((100.0 + cRent) / 100.0), 1.0/12) - mSpent;
         if (newSum >= orgSum) break;
         months++;
      }
      if (months == 0 && orgSum >= 0.0) {
         System.out.println("If you keep that up, you will have money forever. PS we dont count taxes");
      }
      else {
         System.out.println("It will take " + months + " months before you run out of money");
      }
   }

}

Lenke til kommentar

 

Her er en måte å løse det på, bare spør om du vil ha forklaring på noe.

import java.util.Scanner;

class ForsteProgram {

   private final static Scanner IN = new Scanner(System.in);

   private final static double MAX_RENT = 25.0;

   private static double getDoubleUserInput(Double min, Double max) {
      double result = IN.nextDouble();
      while ((min != null && result < min) || (max != null && result > max)) {
         if (min == null)
            System.out.print("Value too large (max = " + max + "), try again: ");
         else if (max == null)
            System.out.print("Value too small (min = " + min + "), try again: ");
         else
            System.out.print("Value outside valid range (" + min + ".." + max + "), try again: ");
         result = IN.nextDouble();
      }
      return result;
   }

   public static void main(String[]args) {
      System.out.print("Write the starting sum for your account: ");
      double orgSum = getDoubleUserInput(null, null);
      System.out.print("How much do you intend to spend mounthly: ");
      double mSpent = getDoubleUserInput(0.0, null);
      System.out.print("The current rent a year: ");
      double cRent = getDoubleUserInput(0.0, MAX_RENT);
      int months = 0;
      double newSum = orgSum;
      while (newSum > 0.0) {
         newSum = newSum * Math.pow(((100.0 + cRent) / 100.0), 1.0/12) - mSpent;
         if (newSum >= orgSum) break;
         months++;
      }
      if (months == 0 && orgSum >= 0.0) {
         System.out.println("If you keep that up, you will have money forever. PS we dont count taxes");
      }
      else {
         System.out.println("It will take " + months + " months before you run out of money");
      }
   }

}

double orgSum = getDoubleUserInput(null, null);

og 

double mSpent = getDoubleUserInput(0.0, null);

legger du inn begrensinger, men hva vil da null si? hva som helst?

Antok før at 0.0 var null

 

Har heller aldri sett Math.pow, months++ eller break før.

Hva vil dette si?

Lenke til kommentar
Hvis verdien er 'null', vil det ikke være noen begrensning. Du ser av signaturen til 'getDoubleUserInput' at jeg bruker 'Double' istedenfor 'double', som gir meg muligheten til å gi inn verdien 'null' i tillegg til alle mulige 'double'-verdier. 'while'-uttrykket i 'getDoubleUserInput' gjør at verdien brukeren oppgir kun sjekkes mot 'min'/'max'-verdiene hvis disse ikke er null.

 

Math.pow(x, y) er en funksjon som gir deg resultatet av 'x opphøyd i y'.

 

'months++' er en kortere måte og skrive 'months = months + 1' eller 'months += 1' på. Du kan også skrive '++months'. For sammensatte uttrykk må du passe på å bruke det riktig, f.eks. vil uttrykket 'int months = 1; System.out.println(months++);' skrive ut '1', mens 'int months = 1; System.out.println(++months);' skrive ut '2'. Når '++' skrives før variabelnavnet vil variabelen endres før variabelen blir brukt, ved '++' etter variabelnavnet vil variabelen endres etter at variabelen blir brukt.

 

'break' er en måte å avbryte en løkke eller et 'switch'-statement på.
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...