2016-03-29 8 views
0

私は非常にJavaに新しいです、ちょうど2時間前に今日始めました。そして私はこれについて何をすべきか分かりません。これまでのコード:階乗計算のための私の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."); 
     } 
    } 
} 
} 

どうしたのですか?私はあなたに答えを貼り付けることを望んでいません、私は自分自身でそれを理解したいので、あなたは私にヒントを与えることができるか、それとも私自身がこれを理解するための直接の答えではありませんか?これは悪いフレーム化問題が

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を宣言しなければならないのですか? – VividCore

+0

母親は申し訳ありませんが、それはヒントでした。私はどのように私は答えを完全に明示せずに多くをヒントできるか分からない。 – Taelsin

答えて

0
  1. です:

    は、ここで私が得ているエラーメッセージ(私はEclipseを使用しています)です。

  2. 私はこれを実行していない

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

再帰的な方法では全く異なっ実装します。その次の行で参照するときは、アレイ

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

この回答は不適切な入力をうまく処理しないことに注意してください。 – PSchuette

+0

Javaでは再帰的なソリューションは避けてください。 – mascoj

+1

@mascojなぜですか?広いブラシステートメントはどこでも避けるべきです。理由を教えてください。一般的に遭遇する反例は数多くあります。 – EJP

3

はスコープではありません。あなたはwhileループの外newArValを定義する必要がスコープでそれを持って来るために

 String newArVals = Integer.toString(newArVal)); 

すなわち

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

変数newArValsを作成する必要はありません