Java Array跳过输出?

时间:2017-09-09 01:51:44

标签: java arrays methods output

我正在为我的编程课做一个作业,我无法弄清楚为什么我的输出出错了。

我们应该“打印”上一年人口的“差异”。(当然,这个值在列表的第一年是空白的。) 使用格式控件打印上一年的年份,人口值和差异的值。 “

我的老师告诉我们输出应该是什么样的:

期望的输出:

Desired Output

但我一直这样说:

我的输出:

My Output

这是我的代码:

import java.util.Scanner;
import java.io.*;

public class AssignmentOne
{

    public static void main(String[] args) throws IOException 
    {
        // Array Version
        ArrayVersion();
        System.out.println("Finished Array Version of Assignment");
    }

    // Method for ArrayVersion
    public static void ArrayVersion() throws IOException
    {
        // Year as variables
        int year = 1950;
        final int ARRAY_SIZE = 41;

        // Array to use for Population data
        int[] population =  new int[40];

        // Call the method to get data into array
        population = getDataFromFile("USPopulation.txt");

        if(population == null)
        {
            System.out.println("Error: Population did not load");
            return;
        }



        // Output
        System.out.println("This is the Simple Array Version of \nPopulation Data US");
        System.out.println("\nYear \tPopulation \tDifference");
        System.out.println("");
        System.out.printf("%d \t%,d,000\n", year, population[0]);
        for(int i = 1; i < population.length; i++)
        {
            System.out.printf("%d \t%,d,000 \t%,d,000 \n", ++year, population[i], Math.abs(population[i] - population[++i]));
        }


        // Calculating the average + displaying it
        int sum = 0;
        for(int g = 0; g < population.length; g++)
        {
            sum += population[g];
        }
        int average;
        average = sum / population.length;
        System.out.println("Average:" + average);


    }
    // Method to get data from specified "filename" into an array of ints
    public static int[] getDataFromFile(String USPopulation) throws IOException
    {

        // Array to use for Population data
        // Opening file
        File file = new File("E:/Programming 2/Assignment 1/src/USPopulation.txt");
        Scanner inputFile = new Scanner(file);


         int fileSize = 0;
         while(inputFile.hasNext())
         {
             inputFile.nextInt();
             fileSize++; 
         }

         Scanner input2 = new Scanner(file);
         int[] fileData = new int[fileSize];
         for(int i = 0; i < fileSize; i++)
         {
             fileData[i] = input2.nextInt();
         }
        // System.out.println(fileData[40]);


         // return the array fileData
         return fileData;
    }

2 个答案:

答案 0 :(得分:0)

population[++i]

有你的问题。

前缀增量只是在获得值之前递增i的值,其中i++获取值然后递增i

只需将其更改为population[i+1]即可。 :P

编辑:

for(int i = 1; i < population.length; i++)
{
System.out.printf("%d \t%,d,000 \t%,d,000 \n", ++year, population[i], population[i] - population[i-1]);
}

答案 1 :(得分:0)

整个问题都在这一行:

  System.out.printf("%d \t%,d,000 \t%,d,000 \n", ++year, population[i], Math.abs(population[i] - population[++i]));

首先,使用++i每次迭代会使循环计数器i增加一次,因此您只需查看每隔一年年。毫无疑问,你试图找出一年人口与下一年年人口之间的差异;查看明年人口的正确方法是population[i+1]。但是,正如您所说,使用population[i+1]最终会为您提供IndexOutOfBoundsException。那么,那是因为当i指向去年时,i+1指向超出人口数据数组的末尾。

第二个问题是,你真的希望找到每年人口与之前年的人口之间的差异:population[i] - population[i - 1]。现在,当i指向去年时,i-1仍然在数组范围内,并且因为您的循环实际上以i == 1开头,i - 1仍然是一个有效的索引。