2016-03-29 6 views
0

Also ich bin extrem neu in Java, erst heute vor ein paar Stunden gestartet. Und ich habe keine Ahnung, was ich dagegen tun soll; so weit mein Code:Was ist falsch mit meinem Java-Code für die Berechnung von Fakultäten?

import java.util.Scanner; 
public class Class_one{ 
static Scanner userInput = new Scanner(System.in); 
public static void main(String[] args){ 
    int[] listArray; 
    System.out.print("Please enter the number to calculate the factorial for: "); 
    if (userInput.hasNextInt()){ 
     int numEnter = userInput.nextInt(); 
     final int numEnterC = numEnter; 
     if (numEnter >= 0){ 
      listArray = new int[numEnterC]; 
      int arrayVal = 0; 
      while (numEnter >= 0){ 
       listArray [arrayVal] = numEnter; 
       arrayVal++; 
       numEnter = numEnter - 1; 
       if (numEnter == 0){ 
        break; 
       } 
      } 
      while (arrayVal >= -1){ 
       int newArVal = listArray[arrayVal]*listArray[arrayVal - 1]; 
       newArVal = listArray[arrayVal]; 
       arrayVal = arrayVal - 1; 
      } 
      //I don't know what's happening in the next line: 
      String nArVals = Integer.toString(newArVal)); 
      System.out.println(nArVals + " is the result of the factorial operations of " + numEnterC); 
     } 
     if (numEnter == 0){ 
      System.out.println("1"); 
     } 
     if (numEnter <= 0){ 
      System.out.println("Negatives unavailable for factorial."); 
     } 
    } 
} 
} 

Also, was mache ich falsch? Ich möchte nicht, dass ihr die Antwort einfach einfügt, ich möchte es selbst herausfinden, könntest du mir einen Hinweis geben oder keine direkte Antwort, damit ich das selbst herausfinden kann?

Hier ist die Fehlermeldung erhalte ich (ich bin mit Eclipse):

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
newArVal cannot be resolved to a variable. 
Syntax error on token ")", delete this token. 
at project_one.Class_one.main(Class_one.java:27) 
+2

Wo ist Ihre Erklärung für 'newArVal'? – Taelsin

+0

Ist es nicht schon erklärt? Oder muss ich jedes int deklarieren wie * int name von int; *? – VividCore

+0

Haha Entschuldigung, das war der Hinweis. Ich bin mir nicht sicher, wie ich mehr angeben kann, ohne die Antwort direkt zu sagen. – Taelsin

Antwort

0
  1. Dies ist eine schlecht eingerahmte Frage.
  2. ich völlig anders in einer rekursiven Art und Weise implementieren würde

    public int factorial(int number){ 
        if(number>0){ 
         return number*factorial(number-1); 
        } else { 
        return 1; 
        } 
    } 
    

Ich habe dies nicht ausgeführt werden.

+0

Hinweis: Diese Antwort behandelt keine fehlerhaften Eingaben. – PSchuette

+0

Rekursive Lösungen sollten in Java immer vermieden werden. – mascoj

+1

@mascoj Warum? Broad-Brush-Anweisungen sollten überall vermieden werden. Gib Gründe. Es gibt eine große Anzahl häufig anzutreffender Gegenbeispiele. – EJP

3

Sie brauchen nicht das Array

int numEnter = userInput.nextInt(); 
int factorial = 1; 
for (int i=1; i <= numEnter; i++) factorial *= i; 
0

Die Variable newArVals zu schaffen, ist in ihrem Umfang nicht, wenn seine in der folgenden Zeile verwiesen.

 String newArVals = Integer.toString(newArVal)); 

es zu bringen, in ihrem Umfang müssen Sie newArVal außerhalb der while-Schleife definieren heißt

 int newArVal =0; 
    while (arrayVal >= -1){ 
      newArVal = listArray[arrayVal]*listArray[arrayVal - 1]; 
      newArVal = listArray[arrayVal]; 
      arrayVal = arrayVal - 1; 
     } 
Verwandte Themen