繁体   English   中英

从main方法调用void方法,无法在void方法内传递参数

[英]Calling void methods from main method, cannot pass arguments within void methods

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

}

}

我认为您想从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为字段。

您的方法接受字符串作为参数,但尚未传递任何参数。 您需要在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;
}

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

String x = new String();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM