标题:照着书打的代码还是不能执行,老司机能帮看一下错在哪儿吗?感谢
只看楼主
notbad301
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2018-2-17
结帖率:100%
 问题点数:0 回复次数:4 
照着书打的代码还是不能执行,老司机能帮看一下错在哪儿吗?感谢
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+"年不是闰年");
    }
    }
}
搜索更多相关主题的帖子: 代码 Scanner year System out 
2018-02-21 22:49
notbad301
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2018-2-17
得分:0 
看出来了!原来Scanner scan=new Scanner(System.in);这句应该放在主方法以内。
2018-02-21 23:12
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
得分:0 
year不需要用Long类型来接收,int就可以

假如人生没有梦想,和咸鱼有什么区别!
2018-02-21 23:20
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
以下是引用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改为局部变量是更好的选择,但是错误的原因分析很重要,决定了修改的方案。
多想想总是没坏处的。

剑栈风樯各苦辛,别时冰雪到时春
2018-02-22 20:24
zxyBCCN
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-2-23
得分:0 
这是CMD 编译时 出现的提示

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

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

2018-02-23 12:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484815-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.115973 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved