我在这里遇到了我的代码中的另一个问题,因为我是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);
}
}
输入为
63个
67个
50
我的目标是让输出为180
但是我得到了
6363
6767
5050
有人可以帮助我解决问题。
答案 0 :(得分:1)
你不是在添加数字而是连接字符串:
split[0] += getAge(split[0]);
总结值(例如,第一列字段的数字内容)
int sum = 0;
Integer.parseInt(split[0])
)和sum
。答案 1 :(得分:1)
这对我来说是第一个问题:
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]);
这只会改变split [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);
答案 2 :(得分:0)
您的实际错误在这里,因为您使用+添加两个包含整数
的字符串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数组中,请执行以下操作:
int agesum[] = new int[]
agesum[0] += Integer.parseInt( getAge(split[0]));
答案 3 :(得分:0)
问题在于你
split[0] += getAge(split[0]);
由于拆分表的类型是String,它将连接值。您需要一个结果表,例如:
int[] result = new int[];
然后:
result[0] += getAge(split[0]);
我会尽力为您的目的制定一个好的设计: