注册 登录
编程论坛 JAVA论坛

照着书打的代码还是不能执行,老司机能帮看一下错在哪儿吗?感谢

notbad301 发布于 2018-02-21 22:49, 2330 次点击
import java.util.Scanner;
public class Yearpanding {
    Scanner scan=new Scanner(System.in);
    public static void main(String[] args) {
        
        System.out.println("请输入年份");
        
        long year=scan.nextLong();
        if(year%4==0&&year%100!=0||year%400==0) {
            System.out.println(year+"年是闰年");
        }
        else {System.out.println(year+"年不是闰年");
    }
    }
}
4 回复
#2
notbad3012018-02-21 23:12
看出来了!原来Scanner scan=new Scanner(System.in);这句应该放在主方法以内。
#3
疯狂的小a2018-02-21 23:20
year不需要用Long类型来接收,int就可以
#4
林月儿2018-02-22 20:24
以下是引用notbad301在2018-2-21 23:12:16的发言:

看出来了!原来Scanner scan=new Scanner(System.in);这句应该放在主方法以内。


这个可以进一步去解释,scan这个对象作为成员变量需要当前类的实例才能调用,如下
程序代码:
import java.util.Scanner;

public class Yearpanding {
    Scanner scan=new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("请输入年份");
        Yearpanding instance = new Yearpanding();
        
        long year=instance.scan.nextLong();
        instance.scan.close();
        
        if(year%4==0&&year%100!=0||year%400==0) {
            System.out.println(year+"年是闰年");
        }
        else {
            System.out.println(year+"年不是闰年");
        }
    }
}

注意流用完随手关闭。

如果不想实例化在main方法直接调用,则要改为静态的变量,如下
程序代码:
import java.util.Scanner;

public class Yearpanding {
    static Scanner scan=new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("请输入年份");
        long year=scan.nextLong();
        scan.close();
        
        if(year%4==0&&year%100!=0||year%400==0) {
            System.out.println(year+"年是闰年");
        }
        else {
            System.out.println(year+"年不是闰年");
        }
    }
}

至于将scan改为局部变量是更好的选择,但是错误的原因分析很重要,决定了修改的方案。
多想想总是没坏处的。
#5
zxyBCCN2018-02-23 12:02
这是CMD 编译时 出现的提示

D:\BCCN>javac Yearpanding.java
Yearpanding.java:8: 错误: 无法从静态上下文中引用非静态 变量 scan
        long year=scan.nextLong();
                  ^
1 个错误

结合代码看来很明显: 在静态方法 (main方法)中,想用非静态变量(或者方法)是不允许的。
所以我将代码加了一个修饰符就可以运行了,修改如下:
static Scanner scan=new Scanner(System.in);
加了一个static 修饰符就可以了。

1