Java 寻找最小和最大人口以及平均数

Java 寻找最小和最大人口以及平均数,java,average,delimiter,Java,Average,Delimiter,我一直在努力让这个项目运作起来。我在让程序读取我创建的文件、census2000和census2010时遇到了一些问题。其中包括2000年和2010年的50个州及其人口。我相信我的程序的其余部分是正确的。我被告知要用各种方法找出最小的人口、最大的人口和平均数。以下是2000文件中的两行: 阿拉巴马州4447100 阿拉斯加626932 这是我的节目: public static void main(String[] args) throws IOException { Strin

我一直在努力让这个项目运作起来。我在让程序读取我创建的文件、
census2000
census2010
时遇到了一些问题。其中包括2000年和2010年的50个州及其人口。我相信我的程序的其余部分是正确的。我被告知要用各种方法找出最小的人口、最大的人口和平均数。以下是2000文件中的两行:

阿拉巴马州4447100

阿拉斯加626932

这是我的节目:

public static void main(String[] args) throws IOException {
        String state = "";
        int population = 0;
        int p = 0, s = 0, pop = 0, stat = 0, populate = 0, sum = 0;
        File f = new File("census2000.txt");
        Scanner infile = new Scanner(f);
        infile.useDelimiter("[\t|,|\n|\r]+");
        while (infile.hasNext()) {
            checksmall(p, s);
            checklargest(pop, stat);
            checkAverage(populate, sum);
            population = infile.nextInt();
            state = infile.next("/t");
            System.out.println(state + "has" + population + "people");
        }

        System.out.println(state + "has smallest population of" + population);
        prw.close();
    }

    public static boolean checksmall(int p, int s) {
        boolean returnValue;
        if (p < s) {
            returnValue = true;
        } else {
            returnValue = false;
        }
        return (returnValue);
    }

    public static boolean checklargest(int pop, int stat) {
        boolean returnVal;
        if (pop > stat) {
            returnVal = true;
        } else {
            returnVal = false;
        }
        return (returnVal);
    }

    public static int checkAverage(int populate, int sum) {
        int retVal;
        retVal = populate + sum;
        return (retVal);
    }
      }
publicstaticvoidmain(字符串[]args)引发IOException{
字符串状态=”;
整数总体=0;
int p=0,s=0,pop=0,stat=0,populate=0,sum=0;
文件f=新文件(“census2000.txt”);
扫描仪填充=新扫描仪(f);
infle.useDelimiter(“[\t |,|\n |\r]+”;
while(infle.hasNext()){
小(p,s);
检查最大值(pop、stat);
校验平均值(填充、求和);
人口=infle.nextInt();
状态=填充下一个(“/t”);
System.out.println(state+“has”+population+“people”);
}
System.out.println(state+“具有“+人口中最小的人口);
prw.close();
}
公共静态布尔checksmall(int p,int s){
布尔返回值;
if(p统计){
returnVal=true;
}否则{
returnVal=false;
}
返回(returnVal);
}
公共静态整数校验平均值(整数填充、整数和){
内部检索;
retVal=populate+sum;
返回(retVal);
}
}

我做错了什么?

您需要在加载文件后/加载文件时调用checksmall、CheckMaximum和checkAverage。

我认为问题在于:

state = infile.next("/t");
我想你想做的是跳过文件中的一个标签并读取状态?您可以通过读取该行,然后使用
\t
作为分隔符拆分该行来完成此操作

String line;
while (infile.hasNextLine()){
    line = infile.nextLine();
    String data[] = line.split("\\s+");
    state = data[0];
    population = Integer.parseInt(data[1]);
}

编辑:正如另一个答案所指出的,您正试图在读取文件数据之前对其执行函数。

包括您正试图读取的文件,以便我们可以看到格式。在读取数据之前会调用check*方法,并且对于文件中的所有数据,您只有两个变量(所以也许你会在循环中调用check*in)。假定您只想读取文件扫描的输出,那么扫描仪下一步*测试是否与文件的数据格式匹配?执行此操作时,我会出现错误输入不匹配异常java.lang.NumberFormatException,这意味着文件行中的第一个值不是int(或者文件不是以制表符分隔的)。您肯定应该从文件中发布一个示例行。@CBH它们都在一行还是在不同的行中写入。问题是状态在填充之前。您得到一个numberformatexception,因为您试图将状态转换为int。我将编辑答案,然后上面的代码应该可以工作。@Mementori+1不过使用它更好
\\s+
而不是
\t
使用空格作为delims。我得到这个java.util.InputMismatchException