2017-03-09 1 views
0

私の先生は私のコンピュータサイエンスクラス用の追加のプライムプログラムを作成するよう依頼しました。私はすべての私の空の方法を作成し、すべての数学の論理を理解していると信じています。それはこの場合、変数「x」のメインメソッドからvoidメソッドを呼び出すと、voidメソッド内で引数を渡すことができません

で変数を見つけることができません

:私は私のメインメソッド内の私のメソッドのインスタンスに引数を渡すしようとすると、しかし、それは私に言ってエラーになります

package additiveprimes; 

import java.util.Arrays; 
import java.util.Scanner; 


/** 
* 
* @author talarik048 
*/ 
public class AdditivePrimes { 

public static void main(String[] args){ 

    AdditivePrimes additivePrime = new AdditivePrimes(); 
    additivePrime.userInput(x); 
    additivePrime.isPrime(x); 
    additivePrime.numArray(x); 

} 

public void userInput(String x){ 
    Scanner sc = new Scanner(System.in); 

    try{ 
     System.out.println("Please enter a number: "); 
     x = sc.nextLine(); 
    } catch(NumberFormatException e){ 
     System.out.println("Error, try again: "); 
     x = sc.nextLine(); 
    } 

} 

public void isPrime(String x){ 
    this.userInput(x); 
    boolean prime = true; 
    int y = Integer.parseInt(x); 


    for(int i = 0; i < y; i++){ 

     if(y % i == 0){ 
      prime = false; 
      break; 
     } 

     if(prime){ 
      System.out.println("Your number is prime..."); 
     } else { 
      System.out.println("Your number is not prime..."); 
     } 
    } 

} 

public void numArray(String x){ 
    this.userInput(x); 
    String[] strArray = x.split("\\s+"); 
    boolean prime = true; 

    int[] numbArray = new int[strArray.length]; 
    for(int j = 0; j < strArray.length; j++){ 
     try{ 
     numbArray[j] = Integer.parseInt(strArray[j]); 
     } catch(NumberFormatException e){ 
      System.out.println("ERROR"); 
     } 


     for(int i = 0; i < numbArray.length; i++){ 
     int sum = (Arrays.stream(numbArray).sum()); 
     if(sum % i == 0){ 
      prime = false; 
      break; 
     } 
     if(prime){ 
      System.out.println("Your number is an additive prime..."); 
     } else { 
      System.out.println("Your number is not an additive prime..."); 
     } 
    } 
    } 

} 

} 
+1

"x"は定義されていません。 –

+0

あなたがしようとしていることは動作しません。 https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-valueを読んでください。あなたのuserInputメソッドは**それらを使用できるように**入力を返すべきです。そのメソッドにStringを渡してから、その文字列をuserInputメソッドの中で変更し、そのメソッドの外にその効果を持たせることはできません。 –

+1

ようこそ。将来的には、問題を再現する[MCVE]またはSSCCE(http://sscce.org)を投稿してください。 これにより、役に立つ回答が得られる可能性が高くなります(問題の発見に役立つ場合もあります)。 – c0der

答えて

1

あなたのメソッドは文字列を引数として受け取りますが、渡したことはありません。メインのxを初期化する必要があります。

public static void main(String[] args){ 

    AdditivePrimes additivePrime = new AdditivePrimes(); 
    String x= "55"; 
    additivePrime.userInput(x); 
    additivePrime.isPrime(x); 
    additivePrime.numArray(x); 

} 

上記のコードは、現在の問題を修正しますが。このクラスを使用する正しい方法ではないようです。あなたはおそらく.userInput()メソッドを呼び出して、それを他のメソッドに渡すuserInputを取得する必要があります。

あなたはおそらく、あなたがそれを使用する前に、何としてのxを定義していない

public static void main(String[] args){ 

    AdditivePrimes additivePrime = new AdditivePrimes(); 
    String x = additivePrime.userInput(); 
    additivePrime.isPrime(x); 
    additivePrime.numArray(x); 

} 

public String userInput(){ 
    Scanner sc = new Scanner(System.in); 
    String x = null; 
    try{ 
     System.out.println("Please enter a number: "); 
     x = sc.nextLine(); 
    } catch(NumberFormatException e){ 
     System.out.println("Error, try again: "); 
     x = sc.nextLine(); 
    } 
    return x; 
} 
+0

文字列をuserInputメソッドに渡すのは意味がありません。応答する前の状況を考えてみましょう。 –

+0

@Os。うん、私は知っている。私は彼の元の問題を解決していました。しかし、彼の全体のクラスを修正するには別の2セントです:) –

0

にあなたの全体のクラスを変更することができます。 xを定義してみてください。

public static void main(String[] args){ 

    AdditivePrimes additivePrime = new AdditivePrimes(); 
    String x = additivePrime.userInput(); 
    additivePrime.isPrime(x); 
    additivePrime.numArray(x); 

} 

public String userInput(){ 
    Scanner sc = new Scanner(System.in); 
    String x = null; 
    try{ 
     System.out.println("Please enter a number: "); 
     x = sc.nextLine(); 
    } catch(Exception e){// see OH GOD SPIDERS comment 
     System.out.println("Error, try again: "); 
     x = sc.nextLine();//this is not a good way for a retry 
    } 
    return x; 
} 

また、あなたがxフィールドを作ることができる:あなたの引数が文字列であるので、この場合、私はあなたがuserInputから値を返すしたいと思います...

String x = new String(); 
3

をお勧めします。

関連する問題