2016-03-29 7 views
0

Так что я чрезвычайно новичок в java, просто начал сегодня пару часов назад. И я понятия не имею, что с этим делать; до сих пор мой код:Что не так с моим кодом java для вычисления факториалов?

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."); 
     } 
    } 
} 
} 

Так что я делаю неправильно? Я не хочу, чтобы вы, ребята, просто вставляли ответ, я хочу понять это сам, так что вы могли бы дать мне подсказку или не прямой ответ для меня, чтобы понять это самостоятельно?

Вот сообщение об ошибке я получаю (я использую 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

Где ваша декларация 'newArVal'? – Taelsin

+0

Разве это уже не объявлено? Или мне нужно объявить каждое int как * int имя int; *? – VividCore

+0

Ха-ха, извините, это был намек. Я не уверен, как я могу больше намекнуть, не констатируя ответ. – Taelsin

ответ

0
  1. Это плохо обрамление вопроса.
  2. Я бы реализовать совершенно по-разному в рекурсивной моде

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

Я не запускать это.

+0

Обратите внимание, что этот ответ не обрабатывает неправильную входную скважину – PSchuette

+0

Рекурсивных решений всегда следует избегать в Java. – mascoj

+1

@mascoj Почему? Во всех случаях следует избегать широкомасштабных высказываний. Назови причины. Существует большое количество часто встречающихся встречных примеров. – EJP

3

Вам не нужно создать массив

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

переменной newArVals не в объеме, когда его ссылки в следующей строке.

 String newArVals = Integer.toString(newArVal)); 

Чтобы привести его в рамки вы должны определить newArVal вне цикла в то время как то

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

 Смежные вопросы

  • Нет связанных вопросов^_^