2012-07-04 126 views
0

所以我试图做一个金字塔的增值。防爆。第1行有(5),第2行有(6,7)第3行有(12,10,7)。目标是添加第一行的最高值,以及下一行的最高连接子值。因此,在这种情况下,您将添加5 + 7 + 10,结果为22.您不能在第3行中使用12的原因是因为您必须使用上述数字的子女(每位家长都有2个孩子)。Java扫描仪/阵列金字塔

我的方法是使用扫描仪转变为int值加载到一个数组行由行,不知何故指数前行的最高孩子值的位置,将其添加到正在运行的总。下面的代码我到目前为止...

//数据文件...

//这一切。

public static void main(String[] args) { 
    Scanner scanner = null; 
    try { 
     scanner = new Scanner(new File("https://stackoverflow.com/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个职位]

我怎样才能让扫描器读取一行,它加载到一个数组,循环,并保存从下一行的阵列最高孩子的价值?

回答

0

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

有代码,它很难对他们的所有评论这么多的逻辑缺陷。下面的几个,你可以工作:

只添加共+结果一次,你的循环之外。你应该把它移到一个循环里面,这样总计算就可以了。

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

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

一旦你可以从阵列文件读入到一个二维数组和打印int的列看起来就像文件内容,如果你还是有问题,回来我可以给你一些更多的帮助。

+0

哦,我知道这是搞砸了,if/else甚至都不起作用,但我会做出修复,谢谢! –