【问题标题】:Calling void methods from main method, cannot pass arguments within void methods从 main 方法调用 void 方法,不能在 void 方法中传递参数
【发布时间】:2017-03-09 15:49:26
【问题描述】:

我的老师要求我们为我的计算机科学课创建一个加法素数程序。我已经创建了我所有的 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...");
       }
     }
    }

}

}

【问题讨论】:

  • “x”未定义。
  • 您尝试执行的操作将行不通。你应该阅读stackoverflow.com/questions/40480/…。您的 userInput Method 应该返回输入,以便您可以使用它们。您不能将字符串传递给该方法,然后在 userInput 方法中更改该字符串并在方法之外产生效果。
  • 欢迎来到 SO。对于未来,请发布重现问题的minimal reproducible example 或 SSCCE (sscce.org)。这将增加您获得有用答案的机会(也可以帮助您找到问题)。
  • 还有一些与您的问题无关的东西:您捕获 NumberFormatException 是非常无用的,因为如果您只使用 nextLine(),try 块中的任何行都不会抛出它。

标签: java arrays arguments


【解决方案1】:

我想你想从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 设为一个字段。

【讨论】:

    【解决方案2】:

    您的方法接受一个字符串作为参数,但您没有传递任何参数。你需要在main中初始化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;
    }
    

    【讨论】:

    • 将字符串传递给 userInput 方法没有意义......在回答之前考虑一下情况。
    • @Os。是,我知道。我只是在解决他原来的问题。但是修复他的整个班级需要另外两分钱:)
    【解决方案3】:

    在使用 x 之前,您还没有将它定义为任何东西。尝试定义 x。在这种情况下,由于您的参数是字符串,我建议...

    String x = new String();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多