首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效地从控制台获取输入

高效地从控制台获取输入
EN

Stack Overflow用户
提问于 2016-09-05 15:45:29
回答 1查看 258关注 0票数 0

我正在研究uva 00787

(来自uva online网站的问题评委:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=9&page=show_problem&problem=728)

它获取一个数字列表,并找到该列表中产生最大乘积的子序列。但实际上,程序只显示最大的乘积,而不是子序列,或者它的开始和结束索引。

我想是因为有人建议我使用java的BigInteger来包含一个非常大的数字,列表中可能有100个数字,每个数字可以有5位数长,因此最大值可以是99999^100 (非常大!)。有了这些知识,使用BigInteger就很有意义了。

现在,我的问题简单多了。我的主要偏好是C++,在编写代码时,我不得不更多地考虑java语言,我认为可能有一种比我所做的更有效的方法来进行简单的解析。我基本上使用了Scanner类和String类,然后使用字符串解析从一行文本中获得我想要的值。下面是我所做的(作为一个简单的例子):

代码语言:javascript
复制
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int next;
    String number = scanner.nextLine();
    while(!number.isEmpty())
    {
        do
        {
            next = Integer.parseInt(number.substring(0, number.indexOf(' ')));
            number = number.substring(number.indexOf(' ') + 1, number.length());
            System.out.println(Integer.toString(next));
        }while(!number.equals("-999999"));
        System.out.println(number);
        number = scanner.nextLine();
    }
}

这里发生的情况是,我从控制台获得一行代码,并使用"-999999“作为标记值。该循环解析列表中的每个整数,并在控制台上给出它的值。一旦检测到"-999999“,则循环结束。然后,程序等待另一行,该行返回循环查找"-999999“的标记值,除非下一行是空的,因为用户只需按enter键。然后,外部循环终止,程序也终止。

我不是特别喜欢这个解决方案,但我想不出更好的方法。很难描述我为什么不喜欢它。也许这只是因为我感觉它比需要的更复杂。

感谢您能提供的任何指导,

布伦特。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-05 16:19:21

你可以这样做:

代码语言:javascript
复制
Scanner sc = new Scanner(System.in);        
List<Integer> list;

while(sc.hasNext()) { // until EOF
    list = new ArrayList<>();
    while(sc.hasNextInt()) {
        int n = sc.nextInt();
        if(n == -999999)
            break;
        list.add(n);
    }
    System.out.println(list);
    // Your list of numbers are ready. Do whatever you need.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39325920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档