使用扫描程序在Java中输入的未指定行数

时间:2016-07-29 16:33:16

标签: java input java.util.scanner

我正在尝试创建一个程序,通过看起来像这样的输入找到最大总和:

5< - 这是行数 1
2 3
1 5 7
9 1 1 2
8 5 4 13 2

但是三角形的数量是未知的。我需要从控制台获取输入,但我不知道如何查看是否还有什么要输入。

更好的话。如何扫描System.in,这是一个可能

的输入

2
18个
430 302
6
102个
76 76
268 153 185
492 480 112 405
286 436 126 25 391
390 32 399 76 29 174

或者只是

2
18个
430 302

我知道如果我使用scan.hasNext(),如果下次没有任何内容,它将会阻止。输入的所有数字都可以一次输入。

3 个答案:

答案 0 :(得分:1)

似乎输入具有以下格式:

    N
    X    ]
    X X  ] pyramid height
    X X X]
    ^---^  pyramid width

    In this case, N=3, T=6

我通常这样做的方式是只是阅读它并检查输入是否有效。但在这种情况下,输入包含一个前导整数N,它可以告诉你金字塔的大小'接下来。您也可以使用 而不是依靠空格来确定字符序列NX中的位置。或者一个金字塔结束而另一个金字塔开始。 永远不要依赖空白,小孩!

我会扫描N并从中确定金字塔中元素T的总数。然后我会尝试读取那么多数字,忽略所有空格,除了使用它们作为数字之间的分隔符。您可以尝试尽可能长时间地阅读N,因为成功的N读取意味着金字塔会跟随(只要输入正确)。

无法读取数字可能是因为输入无效或因为到达文件结尾。查看您所用语言的I / O设施文档。

我总是写这样的小程序,总是退出任何输入错误。在编程挑战中可以安全地假设输入错误意味着文件结束而非无效输入。

因为这对我来说听起来像是一个非常熟悉的编码挑战,所以我留下了实际的编码并找到适当的函数用作读者的练习。

答案 1 :(得分:0)

你的问题很模糊。你说你在寻找最高金额。您向我们展示了输入但没有结果。你在输入中汇总所有数字吗?或者你只是按行总结?您没有尝试向我们展示您编写的代码,以便我们可以找到问题并解决它。

由于您知道行数,因此使用for循环来迭代该行数,然后使用scanner.nextLine来获取行。创建一个可能称为parseIntFromString()的方法。然后,您可以使用广泛的String操作来获取整数并将它们添加到一起。

我添加了一个示例来帮助您入门:

import java.util.Scanner;


public class TestScannner
{
    private static String temp;
    private static int maximumRowSum ;

    public static void main( String[] args )
    {
        int numberOfRows;
        Scanner input = new Scanner( System.in );

        System.out.println( "Enter the number of rows: " );
        temp = input.nextLine();
        numberOfRows = Integer.parseInt( temp );
        int rowSum[] = new int[ numberOfRows ];

        for( int i = 0; i < numberOfRows; i++ )
        {
            temp = input.nextLine();
            rowSum[ i ] = parseAndAdd( temp );
        }
        System.out.printf(  "The maximum row sum is: %d",  findMax( rowSum ) );

    }

    private static int findMax(int[] rowSum) {
        for( int i = 1; i < rowSum.length; i++ )
        {
            maximumRowSum = Math.max( rowSum[ i - 1 ] , rowSum[ i ] );
        }
        return maximumRowSum;

    }

    private static int parseAndAdd( String combination ) {
        // TODO Auto-generated method stub
        int total = 0;
        String[] numbers = temp.split(  " " );
        for( int i = 0; i < numbers.length; i++ )
        {
            total += Integer.parseInt( numbers[ i ] );
        }
        //total += Integer.parseInt( substr )
        return total;
    }

}

答案 2 :(得分:0)

不要害怕使用hasNext()。如果您重定向输入,它将自动运行。如果您打算手动输入输入,则必须输入special end-of-input character(* nix下的 CTRL-D ,或Windows中的 CTRL + Z )结束。