Beräkna fakultet i Java
hej, när jag stoppar in 6 som input får jag -1420957696
men jag vill då jag stoppar in 6 att consolen ska visa 720 ( dvs 6 x 5 x 4 x 3 x 2 x 1 )
Jag ser inte felet på mitt program… varför får jag ett HELT annat tal?
public class solo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int fact = 1;
while (fact < number) {
number *=fact;
++fact;
}
System.out.println(number);
}
}
Rubrik korrigerad från "5*4*3*2*1=720" till nuvarande, en beskrivande rubrik. Jag har även tagit bort den tomma spoilern och formaterat kodan enligt ovan. /Dracaena, moderator
Anledning är för att du har skapat en oändligt while loop men den märks inte för att programmet bryts eftersom talet därpå kommer överstiga rangen för en signed integer.
I din while loop så ändrar du på både fact och number. Det som händer med exempelvis input 6 är att vid iteration två så har du 6*2=number, och number kommer forsätta växa rätt kraftigt medan fact endast växer med 1 så loopen kommer aldrig att ta slut.
Fast hur blir den negativ ?
om input är 5 så borde väll loopen sluta när facit är 4 ?
Det finns ett maximalt värde för en integer, eftersom allt är i något som kallas tvåskomplement så kommer talet bli negativt om vi adderar 1 till det maximala värdet på en integer.
Jag antar att du försöker beräkna n!, isf så finns det två standard val. Antingen rekursion eller en foor-loop. Det går så klart att göra med en while loop också men det är smidigare med en for loop.
Generellt kan man säga att while loopar används då vi inte vet hur länge vi skall iterera och for loopar är när vi vet hur länge vi skall iterera. I detta fallet vet vi exakt hur länge vi vill iterera eftersom n! = n(n-1)(n-2)(n-3)....
Lyckades lösa den nu, tack!