如果我的代码不返回任何 void 类型,为什么我会得到 void not allowed?

问题描述 投票:0回答:1

我是编码新手。我花了好几个小时尝试调试这个。

我的程序应该询问用户他们想要的最大数字(最多 100),然后生成 10 个随机加法问题,用户必须检查它是否正确,然后告诉用户他们正确了多少个。

这是我的主要功能,它将所有内容组合在一起。我收到错误:

method GenerateArray in class ArrayGenerator cannot be applied to given types; ProblemGenerator Problems = new ProblemGenerator(randomnumbers.GenerateArray());

但是 ArrayGenerator 类中的“GenerateArray”方法返回一个 ArrayList ,而 ProblemGenerator 类中的“GenerateProblems”方法接受 ArrayList 作为参数。除了 Main 之外,没有任何函数返回类型为 void。我正在使用 https://repl.it 作为 IDE。

import java.util.ArrayList;
import java.util.Scanner;

class Test{

    //Main Function
    public static void main (String[] args){

        //Declare Array List, Scanners and Variables
        Scanner answer = new Scanner(System.in);
        ArrayList <Integer> List = new ArrayList<>();
        String name;
        int highestnum;
        int score;
        String result;

        //Display Instructions to user
        //Create instance of UserInput 
        UserInput Exam = new UserInput();
        //Get name and store it in String
        name = Exam.userName();
        //Get highest number and store it in highestnum
        highestnum = Exam.gethighestNum();
        
        //Generate Array of Random Numbers
        //Create instance of ArrayGenerator class
        ArrayGenerator randomnumbers = new ArrayGenerator(highestnum);

        //Create array of random numbers and assign it to List
        //Ask user to enter numbers in the array and check if their answer is correct
        //Create instance of ProblemGenerator class
        ProblemGenerator Problems = new ProblemGenerator(randomnumbers.GenerateArray());

        //Call Method to Generate Problems and assign correct answers to score
        score = Problems.GenerateProblems();

        //Display user score in a string
        System.out.println(Problems.result(score));

    }

}

这是我的用户输入类

import java.util.Scanner;

//Declare Class & Scanner
class UserInput{
    Scanner input = new Scanner(System.in);

    // userName function
    public String userName(){

        // Ask user to enter name and store it in variable
        System.out.println("Please enter your name");
        String name = input.nextLine();
        return name;
    }
    
    //gethighestNum function
    public int gethighestNum(){

        int userInput;

        // Keep asking the user until a valid number is entered
        while (true) {
            System.out.print("Enter a number (greater than 10 and less than 100): ");

            // Check if the input is an integer
            if (input.hasNextInt()) {
                userInput = input.nextInt();

                // Check if the number is within the desired range
                if (userInput > 10 && userInput < 100) {
                    System.out.println("You entered: " + userInput);
                    break; // Exit the loop since a valid number is entered
                } else {
                    System.out.println("Invalid input. Please enter a number greater than 10 and less than 100.");
                }
            } else {
                // Consume the invalid input to avoid an infinite loop
                System.out.println("Invalid input. Please enter a valid number.");
                input.next();
            }
        }

        // Close the scanner to prevent resource leaks
        input.close();
        return userInput;
    }
}

我的 ArrayGenerator 类生成一个包含 20 个随机数的 ArrayList,并接受一个参数来设置最大数字。它返回 ArrayList。

import java.util.ArrayList;
import java.util.Random;

class ArrayGenerator{

    //Create varibles and ArrayList and Random
    int highestnum;
    ArrayList <Integer> randomnumberArray = new ArrayList<>();
    Random random = new Random();

    //Constructor
    public ArrayGenerator(int highestnum){
        this.highestnum = highestnum;
    }

    //GenerateArray function
    public ArrayList<Integer> GenerateArray(int highestnum){

        //Loop to generate 20 random numbers
        for (int i = 0; i < 20; i++) {
            int randomInt = random.nextInt(highestnum);
            randomnumberArray.add(randomInt);
        }
        return randomnumberArray;
    }
}

我的 ProblemGenerator 类不断从数组中选择两个数字,然后将其作为加法问题写出来,然后检查用户的答案是否正确,并计算正确的数量。

import java.util.ArrayList;
import java.util.Scanner;

class ProblemGenerator
{
    //Declare ArrayList & Scanner & Variables
    ArrayList<Integer> List = new ArrayList<>();
    Scanner ans = new Scanner(System.in);
    int answer; //Variable to check if user answer is correct
    int k;     //Variable to count number of correct answers

    //Constructor
    public ProblemGenerator(ArrayList<Integer> List)
    {
        this.List = List;
    }

    // Method to Generate Problems and check Answers
    public int GenerateProblems(ArrayList<Integer> List)
    {

        //Run 10 times
        for (int j = 1; j < 11; j++)
        {

            // Print two number from the ArrayList and ask the user to add them together
            System.out.println(" " + List.get(j) + "+" + List.get(List.size() - j) + "= ?");

            //Take user answer
            answer = ans.nextInt();

            //Check if correct
            if (answer == (List.get(j) + List.get(List.size() - j)))
            {

                // If correct increment k
                k++;
            } //end k

        } // end j 

        //return k 
        return k;
    }

    public String result(int k)
    {
        String finalresult = "You answered" + k + "questions correctly ";
        return finalresult;
    }

}

我尝试将返回的ArrayList分配给我在主函数中创建的另一个ArrayList,但仍然出现错误。

java arrays arraylist
1个回答
0
投票

事实上,你有两个编译错误。

第一个是,由于调用

randomnumbers.GenerateArray()
时没有使用 int 作为参数。这是因为,
ArrayGenerator
的构造函数采用了它,而你没有用它做任何事情。也许您可以从构造函数中删除它并将其传递给GenerateArray 方法,或者从GenerateArray 方法中删除参数并重用向构造函数提供的值。无论哪种方式都可以。

下一个问题是下面两行:

problems.GenerateProblems()
也需要一个参数。在本例中,它是一个整数列表。

除此之外,我建议您:

  1. 安装合适的IDE,例如JetBrains IntelliJ IDEA 社区。它是免费的,并在编译之前检查大量类型错误,这会停止编译
  2. 使用 Java 命名约定,以便其他人立即理解您的代码。
© www.soinside.com 2019 - 2024. All rights reserved.