0

所以我试图建立一个增值金字塔。前任。第 1 行有 (5),第 2 行有 (6,7) 第 3 行有 (12,10,7)。目标是添加第一行的最高值,下一行的最高连接子值。因此,在这种情况下,您将添加 5+7+10,结果为 22。您不能使用第 3 行中的 12 的原因是因为您必须使用上述数字的孩子(每个父母都有2 个孩子)。

我的方法是使用 Scanner 将 int 值逐行加载到数组中,并以某种方式索引前一行的最高子值的位置以将其添加到运行总数中。这是我到目前为止的代码......

//在数据文件中...

5

6 7

12 10 7

//就这样。

    public static void main(String[] args) {
    Scanner scanner = null;
    try {
        scanner = new Scanner(new File("/users/joe/desktop/data.txt"));
    } catch (FileNotFoundException e) {
        System.out.println("File not found.");
        e.printStackTrace();

    } //reads the file

    int[] a = new int[100]; //establishes new array with a max size of 100
    int i = 0; //placeholder for array position
    int result = 0;
    int total = 0;

    while(scanner.hasNextLine()){ //loops through line
        a[i++] = scanner.nextInt(); //adds int to array
        if(i == 0){ //does this belong here?
            result = a[0];
        }
        else{
            if(a[i-1] >= a[i+1]){
                result = a[i-1];
            }
            else if(a[i-1] <= a[i+1]){
                result = a[i+1];
            }
        }
    }
    total =  total + result;
    scanner.close();

    System.out.print(Arrays.toString(a));
    System.out.println("\n" + total);


    }
    }

目前,这将打印出:[5,6,7,12,10,7,0,0,0,0,0,...最多 100 个位置]

5

如何让扫描仪读取一行,将其加载到数组中,循环,并从下一行的数组中保存最高的子值?

4

1 回答 1

0

当我执行该代码时,我在读入所有数字后得到 NoSuchElementException。发生这种情况是因为您总是检查文件的下一行,但读取下一个整数。

代码中有太多的逻辑缺陷,很难一一评论。以下是您可以处理的一些内容:

您只需在循环之外添加总计 + 结果一次。您应该将其移动到循环内,以便正确计算总数

你计算结果不正确。至少,您应该有一个变量来指示最后一行上最高数字的位置。您还将 i -1 与 i+1 进行比较...当您到达最后一行时,这将不起作用,因为您将比较 i 两侧的项目而不是 i 下方的项目。

我建议将变量读入三角形二维数组。您可以通过为每一行创建另一个扫描仪来做到这一点;将每一行读入新的扫描仪;并轮询 nextInt()。然后,您可以比较 arr[row][pos] 和 arr[row][pos+1],它们将是 arr[row-1][pos] 的子级。

一旦您可以将文件读入二维数组并从数组中打印出 int 以看起来就像文件内容一样,如果您仍然遇到问题,请回来,我可以为您提供更多帮助。

于 2012-07-04T02:47:07.977 回答