Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算特定列的和时出错_Java - Fatal编程技术网

Java 计算特定列的和时出错

Java 计算特定列的和时出错,java,Java,由于我是java新手,我的代码中还有另一个问题。我的任务是读取一个包含300条记录的文本文件,该记录有13个字段。我试图计算每个字段的总和,例如,如果年龄是我的第一个字段,则将所有300人的年龄相加,然后将其存储在数组索引中 import java.io.*; import java.util.Vector; public class Mean { private static Vector contents; private static BufferedReader br; private

由于我是java新手,我的代码中还有另一个问题。我的任务是读取一个包含300条记录的文本文件,该记录有13个字段。我试图计算每个字段的总和,例如,如果年龄是我的第一个字段,则将所有300人的年龄相加,然后将其存储在数组索引中

import java.io.*;
import java.util.Vector;
public class Mean
{
private static Vector contents;

private static BufferedReader br;
private static FileInputStream inputstream;
private static FileOutputStream outputstream;

public Mean()
{
    contents = new Vector();
}
public void doDuplicationRemoval(String filename)
{
    try{
        inputstream = new FileInputStream(filename);
        br = new BufferedReader(new InputStreamReader(inputstream));
        String string = "";
        while((string = br.readLine())!= null)
        {
            String[] split = string.split(",");
            Vector vector = new Vector();
            for(int i=0; i<split.length; i++)
                vector.add(split[i].trim());
            if(!vector.contains("?"))
    {
        contents.add(split);
    }


    }
    }
    catch(Exception err){
        System.out.println(err);
    }
}

 public void doDataConv(String filename)
{
    DataConversion.readFile(contents);
    DataConversion.writeFile(filename);
}

  public static void doDataConversion(Vector contents)
{
    DataConversion.readFile(contents);
    for(int i=0; i<contents.size(); i++)
    {
        String string = "";
        String[] split = (String[])contents.get(i);
        split[0] += getAge(split[0]);
        System.out.println(split[0]);
}
}
  private static String getAge(String src)
{
    String age = src;
    return age;
}

public static void main(String [] args) {
    Mean dr;
    dr = new Mean();
    dr.doDuplicationRemoval("input.txt");
    dr.doDataConv("inp_out.txt");
dr.doDataConversion(contents);
}


}
import java.io.*;
导入java.util.Vector;
公共类平均数
{
私有静态向量内容;
专用静态缓冲读取程序br;
私有静态文件inputstream inputstream;
私有静态文件输出流输出流;
公众平均数()
{
内容=新向量();
}
public void doduplicationremovation(字符串文件名)
{
试一试{
inputstream=新文件inputstream(文件名);
br=新的BufferedReader(新的InputStreamReader(inputstream));
字符串=”;
而((string=br.readLine())!=null)
{
String[]split=String.split(“,”);
向量=新向量();

对于(int i=0;i您的实际错误在这里,因为您使用+添加两个包含整数的字符串

split[0] += getAge(split[0]);//here split[0] is String 63, getAge(split[0]) 
                     //retuns also String 63 hence addition  gives "63" + "63" = "6363"
正在进行字符串相加,即连接

因此,进行如下转换:

split[0] = new Integer (Integer.parseInt(split[0]) +
                          Integer.parseInt( getAge(split[0]))).toString()
int agesum[] = new int[]

agesum[0] += Integer.parseInt( getAge(split[0]));
如果要在整数数组中存储值,请创建另一个整数数组来存储值

如果要将结果存储在int数组中,请执行以下操作:

split[0] = new Integer (Integer.parseInt(split[0]) +
                          Integer.parseInt( getAge(split[0]))).toString()
int agesum[] = new int[]

agesum[0] += Integer.parseInt( getAge(split[0]));

不是添加数字而是连接字符串:

split[0] += getAge(split[0]);
求和值(例如,第一列字段的数字内容)

  • 在循环外部定义一个局部变量,如
    int sum=0;
  • 解析字符串中的值(
    Integer.parseInt(split[0])
    )和
  • 将每个解析值添加到
    sum

  • 问题是你在排队

    split[0] += getAge(split[0]);
    
    由于拆分表的类型为字符串,它将连接这些值。您需要一个结果表,如:

    int[] result = new int[];
    
    然后:

    result[0] += getAge(split[0]);
    
    我将尝试为您的目的制定一个好的设计:

    • 创建一个具有记录结构的类。让我们将其命名为record
    • 将记录对象与读取的每一行实例化
    • 放入记录表
    • 您可以创建另一个包含所有总和的记录
    • 不要使用Vector。如果需要列表,请使用ArrayList(多线程上下文除外)。Vector只是Java 2之前的遗留类。它已经过时了

      • 我觉得这是第一个问题:

        private static String getAge(String src)
        {
            String age = src;
            return age;
        }
        
        您将年龄视为一个字符串。如果您想将其视为一个数字,则应该对其进行解析(例如,使用
        Integer.parseInt

        这是第二个问题:

        String string = "";
        String[] split = (String[])contents.get(i);
        split[0] += getAge(split[0]);
        System.out.println(split[0]);
        
        这只是不断更改拆分[0]的值,在下一次迭代中重新分配拆分[0]时,该值将被覆盖。您需要类似以下内容:

        int sum = 0;
        for(int i=0; i<contents.size(); i++)
        {
            String[] split = (String[])contents.get(i);
            sum  += getAge(split[0]); // After changing getAge to return an int
        }
        System.out.println(sum);
        
        int和=0;
        
        对于(int i=0;我建议您在调试器中逐步完成代码,因为有很多代码对我来说毫无意义,可能没有按照您的想法执行。我可以看到它现在在做什么,但就我将要更改的内容而言,我建议您重新编写它,并且只包含您实际需要的内容,因为大多数代码都是这样做的esn不做任何事情或不做他们名字暗示的事情,例如,
        doduplicationremove
        不删除任何东西,重复的或其他。哪一个。我使用了另一个类数据转换,但我没有在这里发布,因为我只在那里执行读写任务