无法从静态上下文引进非静态方法nextInt(),如何解决?

alexander_woo 2007-07-28 12:55:00
新手上路,还请各位大侠多多指教~!~
import java.util.Scanner;
public class CircleDemo
{
public void main(String[] args)
{
System.out.printf("选择要画的圆的类型: 1.实心圆 ; 2.空心圆\n");
/* Scanner scanner = new Scanner(System.in); */
System.out.printf("你输入的数字是:",Scanner.nextInt());///显示这一行有错!无法从静态上下文中引进非静态方法nextInt();
if(Scanner.nextInt()==1)//同样的错误!
{
System.out.printf("请输入要画的实心圆的半径:");
Scanner scanner = new Scanner(System.in);
int num =scanner.nextInt();
renderCircle (new ConcreteCircle(num));
}

else
{
System.out.printf("请输入要画的空心圆的半径:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
renderCircle (new HollowCircle(num));
}
}
public void renderCircle(AbstractCircle circle)
{
circle.render();
}
}
...全文
678 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yanbin_Q 2007-07-29
  • 打赏
  • 举报
回复
要知道为什么不允许这种调用,可以从两种方面来讲:

1、非静态方法需要通过实例来调用,而你在调用静态方法时可能并不产生相应实例,所以不允许
2、非静态方法调用会传递一个隐形参数 this,调用静态方法则不需要,在静态方法中可能根本就不存在相应类型的 this
weiqiyiji 2007-07-29
  • 打赏
  • 举报
回复
int scan = Scanner.nextInt();
然后用scan代替scanner.nextInt()就可以了
ronald108 2007-07-28
  • 打赏
  • 举报
回复
就是Scanner类中的nextInt()不是静态方法.所以不能通过Scanner.nextInt()直接调用nextInt()
必须先把Scanner实例化,再通过实例调用nextInt;

Scanner scanner = new Scanner();
scanner.nextInt();
joejoe1991 2007-07-28
  • 打赏
  • 举报
回复
import java.util.Scanner;
public class test
{
public void main(String[] args)
{
System.out.printf("选择要画的圆的类型: 1.实心圆 ; 2.空心圆\n");
Scanner scanner = new Scanner(System.in);
System.out.printf("你输入的数字是:",scanner.nextInt());///显示这一行有错!无法从静态上下文中引进非静态方法nextInt();
if(scanner.nextInt()==1)//同样的错误!
{
System.out.printf("请输入要画的实心圆的半径:");

int num =scanner.nextInt();
renderCircle (new ConcreteCircle(num));
}

else
{
System.out.printf("请输入要画的空心圆的半径:");

int num = scanner.nextInt();
renderCircle (new HollowCircle(num));
}
}
public void renderCircle(AbstractCircle circle)
{
circle.render();
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧