| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 416 人关注过本帖
标题:照着书打的代码还是不能执行,老司机能帮看一下错在哪儿吗?感谢
只看楼主 收藏
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+"年不是闰年");
    }
    }
}
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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:14
帖 子:348
专家分:1380
注 册:2018-2-6
  得分:0 
year不需要用Long类型来接收,int就可以

假如人生没有梦想,和咸鱼有什么区别!
2018-02-21 23:20
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:90
帖 子:1523
专家分:6651
注 册: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







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

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