下面给出的代码给出以下错误: - 无法从静态上下文引用非静态方法compute(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++){
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;
}
答案 0 :(得分:0)
您有两种选择:
声明compute()
静态:
static int compute(int a){
创建IdeOne
的实例并通过该引用调用compute()
:
IdeOne ideOne = new IdeOne();
a = ideOne.compute(a);
我认为阅读Java tutorials on classes and objects是个好主意。
答案 1 :(得分:0)
您尝试从静态方法(主要方法)调用非静态方法(即计算)。
使用int compute(int a){
static int compute(int a){
答案 2 :(得分:0)
在您的情况下,make方法compute
是静态的。否则,创建一个Ideone
对象并在其上调用您的方法。
答案 3 :(得分:0)
您无法从non-static
方法访问static
方法
您尝试访问的方法是实例级方法,如果没有类实例,则无法访问实例方法/变量
您无法访问不存在的内容。默认情况下,非静态方法尚不存在,直到您创建该类的对象存在哪个方法。静态方法总是存在。
您可以通过以下方式访问您的方法:
1.使compute()
方法静态
int compute(int a){
///rest of your code
}
2。创建类Ideone
的实例并按类对象访问方法。
IdeOne obj = new IdeOne();
obj.compute(a);
obj.compute(b);
答案 4 :(得分:0)
这里给出的答案主要是制作方法static
,这对于这个大小的程序来说很好。但是,随着项目变得越来越大,并不是所有内容都将在您的主体中,因此您可以更大规模地获得此静态/非静态问题,因为其他类不会是静态的。
然后解决方案就是为Main
制作一个课程,如下:
public class Main {
public static void main( String[] args ) {
Ideone ideone = new Ideone();
然后另一个文件包含您的class 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
至于你的主文件。我的工作会奏效,但更好的做法是遵循这里给出的代码示例:
http://docs.oracle.com/javase/tutorial/uiswing/painting/step1.html
应用此实践将确保您在项目的任何位置都没有静态/非静态问题,因为唯一静态的是初始化您的实际代码,然后处理所有代码/进一步启动其他类(这都是非静态的)