我正在为我的编程课做一个作业,我无法弄清楚为什么我的输出出错了。
我们应该“打印”上一年人口的“差异”。(当然,这个值在列表的第一年是空白的。) 使用格式控件打印上一年的年份,人口值和差异的值。 “
我的老师告诉我们输出应该是什么样的:
期望的输出:
但我一直这样说:
我的输出:
这是我的代码:
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;
}
答案 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
将仍然是一个有效的索引。