Java 无法从静态上下文引用非静态方法compute(int)
下面给出的代码出现以下错误:-无法从静态上下文引用非静态方法计算(int) 如果我不能在main()内创建方法,我该怎么办Java 无法从静态上下文引用非静态方法compute(int),java,Java,下面给出的代码出现以下错误:-无法从静态上下文引用非静态方法计算(int) 如果我不能在main()内创建方法,我该怎么办 class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner key = new Scanner(System.in); int t = key.nextInt(); for(int i=0;i<t;i++){
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Scanner key = new Scanner(System.in);
int t = key.nextInt();
for(int i=0;i<t;i++){
int a = key.nextInt();
int b = key.nextInt();
a=compute(a);
b=compute(b);
System.out.println(a+b);
}
}
int compute(int a){
int basea=0, digit;
int temp=a;
while(temp>0){
digit = temp%10;
temp/=10;
if(digit>(basea-1))basea=digit+1;
}
temp=a;
a=0;
int count=0;
while(temp>0){
digit = temp%10;
temp/=10;
a+=digit*Math.pow(basea,count);
count++;
}
return a;
}
类表意符
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
扫描仪键=新扫描仪(System.in);
int t=key.nextInt();
对于(int i=0;i0){
数字=温度%10;
温度/=10;
如果(数字>(basea-1))basea=数字+1;
}
温度=a;
a=0;
整数计数=0;
而(温度>0){
数字=温度%10;
温度/=10;
a+=数字*数学功率(basea,计数);
计数++;
}
返回a;
}
您有两个选择:
compute()
静态:
static int compute(int a){
IdeOne
的实例,并通过该引用调用compute()
:
IdeOne ideOne = new IdeOne();
a = ideOne.compute(a);
我认为最好通读一下。您试图从静态方法(main)调用非静态方法(即compute)
将
int compute(int a){
更改为static int compute(int a){在您的情况下,使方法compute
静态。否则,创建Ideone
对象并在其上调用您的方法。您不能从static
方法访问非静态的方法。
您尝试访问的方法是实例级方法,没有类实例,您无法访问实例方法/变量。
您无法访问不存在的内容。默认情况下,非静态方法还不存在,直到您创建方法所在类的对象。静态方法始终存在
您可以通过以下方式访问您的方法:
1.将compute()
方法设为静态
int compute(int a){
///rest of your code
}
2.按类对象创建类的实例Ideone
和访问方法
IdeOne obj = new IdeOne();
obj.compute(a);
obj.compute(b);
这里给出的答案主要是使方法静态
,这对于这样大小的程序来说是很好的。然而,随着项目越来越大,并不是所有的东西都会在你的main中,因此你会在更大的范围内得到这个静态/非静态的问题,因为你的其他类不会是静态的
然后,解决方案变成为您的Main
创建一个类,如下所示:
public class Main {
public static void main( String[] args ) {
Ideone ideone = new Ideone();
然后是另一个存放您的类Ideone
的文件:
public class Ideone {
Scanner key;
public Ideone() {
key = new Scanner(System.in);
int t = key.nextInt();
for(int i=0;i<t;i++){
int a = key.nextInt();
int b = key.nextInt();
a=compute(a);
b=compute(b);
System.out.println(a+b);
} // end constructor
int compute(int a){
int basea=0, digit;
int temp=a;
while(temp>0){
digit = temp%10;
temp/=10;
if(digit>(basea-1))basea=digit+1;
}
temp=a;
a=0;
int count=0;
while(temp>0){
digit = temp%10;
temp/=10;
a+=digit*Math.pow(basea,count);
count++;
}
return a;
} // end compute
} // end class
公共类Ideone{
扫描键;
公共表意词(){
键=新扫描仪(System.in);
int t=key.nextInt();
对于(int i=0;i0){
数字=温度%10;
温度/=10;
如果(数字>(basea-1))basea=数字+1;
}
温度=a;
a=0;
整数计数=0;
而(温度>0){
数字=温度%10;
温度/=10;
a+=数字*数学功率(basea,计数);
计数++;
}
返回a;
}//结束计算
}//结束类
至于您的主文件,我所做的将起作用,但更好的做法是遵循此处给出的代码示例:
应用此实践将确保您的项目中没有任何静态/非静态问题,因为唯一静态的事情是实际代码的初始化,然后处理所有代码/其他类的进一步初始化(都是非静态的)静态与非静态
您不能在静态方法中使用非静态方法。