如何从同一类中的主方法访问非静态方法



我想做一个数学测验,但我最近开始学习Java,遇到了一些麻烦。我已经读过关于访问方法和东西的文章,但我不明白所有这些应该如何帮助我。

import java.util.Scanner;
public class MatQui{
Scanner scan = new Scanner(System.in);

int correct = 0;

public static void main(String[] args) {

System.out.println("Enter your name: ");
String name = scan.nextLine();

System.out.println("Hello " + name + "! Answer the questions.");

firstQuiz();

}
public void firstQuiz() {

int randomNum1 = (int)(Math.random() * 101 +1);
int randomNum2 = (int)(Math.random() * 101 +1);

int RandomAddSolution = scan.nextInt();
int CorrectAddSolution = randomNum1 + randomNum2;

System.out.println(randomNum1 + " + " + randomNum2 + " = ?");

if (RandomAddSolution == CorrectAddSolution) {
System.out.println("Correct!");
correct++;
}
else if (RandomAddSolution != CorrectAddSolution) {
System.out.println("Wrong! The correct answer is: " + CorrectAddSolution);
}
secondQuiz();
}
public void secondQuiz() {

int randomNum1 = (int)(Math.random() * 101 +1);
int randomNum2 = (int)(Math.random() * 101 +1);

int RandomMinusSolution = scan.nextInt();
int CorrectMinusSolution = randomNum1 - randomNum2;

System.out.println(randomNum1 + " - " + randomNum2 + " = ?");

if (RandomMinusSolution == CorrectMinusSolution) {
System.out.println("Correct!");
correct++;  //Ly Huong Van
}
else if (RandomMinusSolution != CorrectMinusSolution) {
System.out.println("Wrong! The correct answer is: " + CorrectMinusSolution);
}
thirdQuiz();
}
public void thirdQuiz() {

int randomNum1 = (int)(Math.random() * 11 +1);
int randomNum2 = (int)(Math.random() * 11 +1);

int RandomMulSolution = scan.nextInt();
int CorrectMulSolution = randomNum1 * randomNum2;

System.out.println(randomNum1 + " + " + randomNum2 + " = ?");

if (RandomMulSolution == CorrectMulSolution) {
System.out.println("Correct!");
correct++;
}
else if (RandomMulSolution != CorrectMulSolution) {
System.out.println("Wrong! The correct answer is: " + CorrectMulSolution);
}
fourthQuiz();
}
public void fourthQuiz() {

int randomNum1 = (int)(Math.random() * 101 +1);
int randomNum2 = (int)(Math.random() * 11 +1);

int RandomDivSolution = scan.nextInt();
int CorrectDivSolution = randomNum1 / randomNum2;

System.out.println(randomNum1 + " / " + randomNum2 + " = ?");

if (RandomDivSolution == CorrectDivSolution) {
System.out.println("Correct!");
correct++;
endingScreen();
}
else if (RandomDivSolution != CorrectDivSolution) {
System.out.println("Wrong! The correct answer is: " + CorrectDivSolution);
endingScreen();
}
}
public void endingScreen() {
int percentageCorrect = correct * 25;
System.out.println("You answered " + correct + " questions correctly.!n"
+ "That's "  + percentageCorrect + "%!");

if (correct == 0) {
System.out.println(":(");
}
else if (correct != 0) {
System.out.println(":)");
}
}

我想从main访问"firstQuiz(("方法,但我收到错误,无法从static main访问非静态元素。我该如何使用它?

可以通过创建方法所在类的对象来访问非静态方法。

在本例中,您必须在main方法中创建类的对象,并使用该对象调用方法firstQuiz((。

正如tieburach所回答的。。。不能从静态方法访问非静态方法。您不能更改main方法签名,这意味着您可以使main非静态。Main将始终是静态的。

解决方案是使方法成为静态的,但如果不是您想要的,您也可以在main方法中创建另一个类和它的实例,然后调用该类上的方法。

您可以将方法设置为静态,也可以创建一个新的类实例并访问它,如下所示:

Test test = new Test();
test.yourMethod();

正如您可能注意到的,错误表明您无法从静态方法访问非静态方法。对您来说,最简单的解决方案是使您调用的方法也是静态的。

您需要创建一个新的MatQui matqui = new MatQui();,并在调用带有新对象的方法后创建matqui.firstQuiz();

最新更新