Java 计算特定列的和时出错
由于我是java新手,我的代码中还有另一个问题。我的任务是读取一个包含300条记录的文本文件,该记录有13个字段。我试图计算每个字段的总和,例如,如果年龄是我的第一个字段,则将所有300人的年龄相加,然后将其存储在数组索引中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
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
不删除任何东西,重复的或其他。哪一个。我使用了另一个类数据转换,但我没有在这里发布,因为我只在那里执行读写任务