java的Scanner对象获取一个很长的数组
大家讲道理
大家讲道理 2017-04-17 17:27:41
[Java讨论组]

我在做去年网易的笔试题,http://www.nowcoder.com/test/970447/summary
里面的第一题,小易大怪兽的那道,我用scanner对象来获取输入,他的测试用例是个3000多的数组,但是每次scanner获取到1902个元素之后就阻塞了,不知道是怎么回事。
代码如下:


import java.util.Scanner;

/**
 * Created by kbyyd on 2016/3/21.
 */
public class main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        XiaoYi xiaoyi = new XiaoYi(scanner.nextInt());
        for (int i = 0; i < n; i++) {
            xiaoyi.addAbility(scanner.nextInt());
        }
        scanner.close();
        System.out.println(xiaoyi.getAbility());
    }
}

class XiaoYi {
    private int ability;

    XiaoYi(int ability) {
        this.ability = ability;
    }

    public void addAbility(int b) {
        if (ability >= b) ability += b;
        else ability += getpisor(b);
    }

    public int getAbility() {
        return this.ability;
    }

    private int getpisor(int b) {
        if (b < ability) return 0;
        int a = ability;
        int s = -1;
        do {
            s = b % a;
            b = a;
            a = s;
        } while (s != 0);
        return b;
    }
}
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
高洛峰

输入有多组数据,你的代码只处理了一组数据就退出了。

加一个while (scanner.hasNext())的判断就好了。


import java.util.Scanner;

/**
 * Created by kbyyd on 2016/3/21.
 */
public class Main {      // main -> Main
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {  // add while loop
            int n = scanner.nextInt();
            XiaoYi xiaoyi = new XiaoYi(scanner.nextInt());
            for (int i = 0; i < n; i++) {
                xiaoyi.addAbility(scanner.nextInt());
            }
            System.out.println(xiaoyi.getAbility());
        }
        scanner.close();
    }
}

class XiaoYi {
    private int ability;

    XiaoYi(int ability) {
        this.ability = ability;
    }

    public void addAbility(int b) {
        if (ability >= b) ability += b;
        else ability += getpisor(b);
    }

    public int getAbility() {
        return this.ability;
    }

    private int getpisor(int b) {
        if (b < ability) return 0;
        int a = ability;
        int s = -1;
        do {
            s = b % a;
            b = a;
            a = s;
        } while (s != 0);
        return b;
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号