我的问题是,我找不到一种方法来正确显示最低人口值和拥有人口值的省份的正确值。:
编写一个程序,将省数据文件读入名为provinceName的数组和名为provincePopulations的数组。你可以假设有10个省。写一个循环到:将数据读入两个数组。分析数组以计算所有省份的总人口。编写另一个循环来查找人口最少的省份,并打印该省份的名称。
数据以以下方式存储(provinceData.txt):
Ontario
12891787
Quebec
7744530
Nova Scotia
935962
New Brunswick
751527
Manitoba
1196291
British Columbia
4428356
PEI
139407
Saskatchewan
1010146
Alberta
3512368
NF/LB
508270
下面是我的Java代码:
import java.io.*;
import java.util.Scanner;
public class Slide50
{
public static void main(String[] args)throws IOException
{
File file = new File ("C:/provinceData.txt");
Scanner in = new Scanner(file);
int i = 0;
String province[] = new String[10];
String lowProv = null;
int pop[] = new int[10];
int totalPop = 0;
int low = pop[0];
//while there is data in the file to be processed
while(in.hasNext())
{
province[i] = in.nextLine();
pop[i] = in.nextInt();
//discard the \n on the line
in.nextLine();
//regular processing goes here
i++;
}
System.out.printf("\n\t%-16s %20s\n", "Province", "Population");
System.out.printf("\t%-16s %20s\n", "========", "==========");
//print the province population report (which includes a total) using printf
for (i = 0; i < pop.length; i++)
{
System.out.printf("\t%-16s %,20d\n", province[i], pop[i]);
totalPop += pop[i];
//find the province that has the smallest population
//and print out the province name and its population
if (pop[i] < low)
{
low = pop[i];
}
}
System.out.printf("\t%-16s %20s\n", "================", "==========");
System.out.printf("\t%-16s %,20d\n", "Total:", totalPop);
System.out.println("\n\tThe province of " + lowProv + " with a population of " + low);
System.out.println("\tis the least populated of all provinces.");
}
}
下面是我基于以下代码运行的示例:
Province Population
======== ==========
Ontario 12,891,787
Quebec 7,744,530
Nova Scotia 935,962
New Brunswick 751,527
Manitoba 1,196,291
British Columbia 4,428,356
PEI 139,407
Saskatchewan 1,010,146
Alberta 3,512,368
NF/LB 508,270
================ ==========
Total: 33,118,644
The province of null with a population of 0
is the least populated of all provinces.
发布于 2009-11-30 11:06:03
您有两个问题:
low
初始化为零。low
是在创建pop
之后立即初始化的,因此pop[0]
仍然为0。我建议只使用Integer.MAX_VALUE
初始化它(或者将它移动到elsewhere).lowProv
,因为您正在更新low
的值。因此它始终是null
.发布于 2009-11-30 11:06:54
您正在将low
设置为0。将其设置为Integer.INT_MAX。
e:没有人说过了。但是没错,你也需要更新lowProv
发布于 2009-11-30 11:07:32
要做到这一点,最简单的方法是在遍历文件时找到最小值:
while (...) {
province[i] = ...
pop[i] = ...
if (pop[i] < minpop) {
minpop = pop[i];
minprovince = province[i];
}
...
}
您已经完成了第二个循环的大部分工作,但是在您将任何内容放入pop数组之前,您已经将low设置为pop中的第一个条目,所以使用类似于Integer.MAX_VALUE
的值作为种子。
https://stackoverflow.com/questions/1817645
复制相似问题