首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取文件并将数据存储在数组中,然后查找最小的十进制值

读取文件并将数据存储在数组中,然后查找最小的十进制值
EN

Stack Overflow用户
提问于 2009-11-30 10:58:47
回答 3查看 4.5K关注 0票数 0

我的问题是,我找不到一种方法来正确显示最低人口值和拥有人口值的省份的正确值。

编写一个程序,将省数据文件读入名为provinceName的数组和名为provincePopulations的数组。你可以假设有10个省。写一个循环到:将数据读入两个数组。分析数组以计算所有省份的总人口。编写另一个循环来查找人口最少的省份,并打印该省份的名称。

数据以以下方式存储(provinceData.txt):

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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.");   
    }
}

下面是我基于以下代码运行的示例:

代码语言:javascript
复制
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.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-30 11:06:03

您有两个问题:

  1. 您可以将low初始化为零。low是在创建pop之后立即初始化的,因此pop[0]仍然为0。我建议只使用Integer.MAX_VALUE初始化它(或者将它移动到elsewhere).
  2. You,不要更新lowProv,因为您正在更新low的值。因此它始终是null.
票数 1
EN

Stack Overflow用户

发布于 2009-11-30 11:06:54

您正在将low设置为0。将其设置为Integer.INT_MAX。

e:没有人说过了。但是没错,你也需要更新lowProv

票数 0
EN

Stack Overflow用户

发布于 2009-11-30 11:07:32

要做到这一点,最简单的方法是在遍历文件时找到最小值:

代码语言:javascript
复制
while (...) {
  province[i] = ...
  pop[i] = ...
  if (pop[i] < minpop) {
    minpop = pop[i];
    minprovince = province[i];
  }
  ...
}

您已经完成了第二个循环的大部分工作,但是在您将任何内容放入pop数组之前,您已经将low设置为pop中的第一个条目,所以使用类似于Integer.MAX_VALUE的值作为种子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1817645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档