2017-03-09 167 views
0

我的老師要求我們爲我的計算機科學課程創建一個附加素數程序。我創造了我所有的無效方法,並相信將所有的數學邏輯都弄清楚了。然而,當我嘗試參數傳遞到我的主要方法中我的方法的情況下,它給了我一個錯誤說:從main方法調用void方法,無法在void方法中傳遞參數

它無法找到該變量在這種情況下,變量「X」

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方法應該**返回**輸入,以便您可以使用它們。您不能將字符串傳遞給該方法,然後在userInput方法內更改該字符串,並在該方法之外產生該效果。 –

+1

歡迎來到SO。未來請發佈可重現此問題的[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,然後將其傳遞給其他方法。

你可以整體類可能更改爲

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。是的我懂。我只是在解決他最初的問題。但要解決他的全班又是兩美分:) –

0

你還沒有使用它之前x作爲任何定義。嘗試定義x。在這種情況下,由於您的參數都是字符串,我建議......

String x = new String(); 
3

我想你想從userInput返回一個值:

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領域。