5 svar
214 visningar
Solenskiner behöver inte mer hjälp
Solenskiner 87
Postad: 12 feb 2022 21:31 Redigerad: 12 feb 2022 22:09

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

Fermatrix 7841 – Fd. Medlem
Postad: 12 feb 2022 21:38

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.

Solenskiner 87
Postad: 12 feb 2022 21:41

Fast hur blir den negativ ? 

Solenskiner 87
Postad: 12 feb 2022 21:48

om input är 5 så borde väll loopen sluta när facit är 4 ? 

Fermatrix 7841 – Fd. Medlem
Postad: 12 feb 2022 21:53 Redigerad: 12 feb 2022 21:54

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

Solenskiner 87
Postad: 12 feb 2022 22:13

Lyckades lösa den nu, tack!

Svara
Close