【问题标题】:Cannot make a static reference to the non-static method. How would I fix this [duplicate]无法对非静态方法进行静态引用。我将如何解决这个问题[重复]
【发布时间】:2013-11-24 01:51:03
【问题描述】:

我的代码不断收到此错误错误:无法从类型 RationalDriver 对非静态方法 InputMenu() 或 display_Menu() 进行静态引用。我调用了该方法,甚至尝试将它们设为静态,但这无济于事。我将如何为这段代码解决这个问题。我是新手,所以请解释一下或清楚地告诉我我会怎么做。谢谢

 import java.util.Scanner;
 import java.lang.String;

public class RationalDriver{
public static int rationalNum1, rationalDen1, rationalNum2, rationalDen2;
public static Rational r1, r2;
public static void main(String[] args){



Scanner in = new Scanner(System.in); 
// first rational 
System.out.println(" Input first rational number for the Numerator");
rationalNum1 = in.nextInt();
  System.out.println(" Input first rational number for the Denominator");
rationalDen1 = in.nextInt();
if (rationalDen1 == 0){
System.out.println(" Cannont divide by zero ");
 System.out.println(" please re enter another number ");
}
System.out.println("Rational Number #1 = ("+rationalNum1+"/"+rationalDen1+")");         //Displays 1st Rational Number

  // second rational
 System.out.println(" Input 2nd rational number for the 2nd Numerator");
 rationalNum2 = in.nextInt();
 System.out.println(" Input 2nd rational number for the 2nd Denominator");
 rationalDen2 = in.nextInt();
 if (rationalDen2 == 0){
 System.out.println("Cannont divide by zero");
 System.out.println(" please re enter another number");
 }
 System.out.println("Rational Number #2 = ("+rationalNum2+"/"+rationalDen2+")"); ///  /Displays 2nd Rational Number

r1 = new Rational ( rationalNum1, rationalDen1);
r2 = new Rational ( rationalNum2, rationalDen2);

 display_menu();
 InputMenu() ;
 }

 // System.out.println;//toString



    public  void display_menu() //menu options 
   {
     System.out.print(" Enter the corresponding number for the desired action ");
    System.out.println("1) Addition\n2) 2) Subtraction\n3) 3) Multiplication\n4)   4)Division\n5) 5) Test for Eqaulity\n6) 6) Change 1st rational number\n7) 7) Change 2nd   rational number"); 
   }    
   public  void question()
 {
       System.out.println("Do you want to exit? [y/n]");  // ask user if they want to quit with yes or no option
    Scanner q = new Scanner(System.in);
   switch (q.nextInt()) 
{
   case 'y' :
   System.out.println ("Thank you and goodbye.");
   break;

 case 'n' :
 InputMenu();
 break;
 default:

 System.err.println ( "Unrecognized option" );
 break;
 }
  }
    public void InputMenu()  // keys for the menu
  {
  Scanner in = new Scanner(System.in);
  display_menu();
  int temp = in.nextInt();
  switch (temp) 
{
   case 1: //addition
   System.out.println ( "1" );
   System.out.println( "(" +rationalNum1+ "/" +rationalDen1+ ") + (" +rationalNum2+ "/" +rationalDen2+ ") = " +r1.add(r2));

 break;

 case 2: //subtraction
 System.out.println ( "2" );
 System.out.println( "("+rationalNum1+"/"+rationalDen1+")"+ " - " + "("+rationalNum2+"/"+rationalDen2+")" + "=" +  r1.subtract(r2));   
 break;

 case 3: //mulitplication 
 System.out.println ( "3" );
 System.out.println( "("+rationalNum1+"/"+rationalDen1+")"+ " * " + "("+rationalNum2+"/"+rationalDen2+")" + "=" +  r1.multiply(r2));    
 break;

 case 4: //division
 System.out.println ( "4" );
 System.out.println( "("+rationalNum1+"/"+rationalDen1+")"+ " / " + "("+rationalNum2+"/"+rationalDen2+")" + "=" +  r1.divide(r2));      
 break;

 case 5: //compare to
 System.out.println ( "5" );
// question();
 break;

 case 6: //change the 1st Rational Number
 System.out.println ( "6" );

 System.out.println(" Input first rational number for the Numerator");
 rationalNum1 = in.nextInt();
 System.out.println(" Input first rational number for the Denominator");
 rationalDen1 = in.nextInt();
 if (rationalDen1 == 0){
 System.out.println(" Cannont divide by zero");
 System.out.println(" please re enter another number");
 }
 break;

   case 7: //change the 2nd Rational Number
   System.out.println ( "7" );
   System.out.println(" Input 2nd rational number for the 2nd Numerator");
  rationalNum2 = in.nextInt();
  System.out.println(" Input 2nd rational number for the 2nd Denominator");
  rationalDen2 = in.nextInt();
  if (rationalDen2 == 0){
  System.out.println("Cannont divide by zero");
  System.out.println(" please re enter another number");
  break;
  }


default:
 System.out.println ( "Unrecognized option" );
 break;
}
}

}

【问题讨论】:

  • 您需要了解static 的含义。
  • 以及“非静态”的含义。以及对象是什么。
  • @HotLicks 明白了,谢谢

标签: java methods compiler-errors static-methods


【解决方案1】:

应该是public static void InputMenu()

也应该将display_menu() 设为静态

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2014-06-08
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多