【问题标题】:Java Array skipping Outputs?Java数组跳过输出?
【发布时间】:2017-09-09 01:51:44
【问题描述】:

我目前正在为我的编程课做作业,但我不知道为什么我的输出出错了。

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

我的老师给了我们输出应该是什么样子的:

期望的输出:

但我不断得到这个:

我的输出:

这是我的代码:

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;
    }

【问题讨论】:

    标签: java arrays methods output


    【解决方案1】:
    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]);
    }
    

    【讨论】:

    • 我已经尝试过了,除了我收到此错误消息:线程“主”中的异常 java.lang.ArrayIndexOutOfBoundsException: 41 at AssignmentOne.ArrayVersion(AssignmentOne.java:48) at AssignmentOne.main(AssignmentOne .java:10)
    • 尝试将 for(int i = 1; i
    • 是的,我试过了,但它仍然给了我越界错误
    【解决方案2】:

    整个问题都在这一行:

      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仍然是有效的指数。

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多