我有个任务。程序的输入是一个类似CSV的文本文件。其任务是向所有运动员输出一个XML文件,按其位置的升序排列,其中包含所有输入数据加上总分和比赛中的位置(在分数相等的情况下,运动员必须共享位置,例如3-4和3-4而不是3和4)。
这是我的cvs文件:
Jana Kari;12.61;5.00;9.22;1.50;60.39;16.43;21.60;2.60;35.81;5.25.72
Eva Narun;13.04;4.53;7.79;1.55;64.72;18.74;24.20;2.40;28.20;6.50.76
Maja Hope;13.75;4.84;10.12;1.50;68.44;19.18;30.85;2.80;33.88;6.22.75
Kirke Kanda;13.43;4.35;8.64;1.50;66.06;19.05;24.89;2.20;33.48;6.51.01我得到了每个十项全能项目的常量
double[] A = new double[]{25.4347,0.14354,51.39,0.8465,1.53775,5.74352,12.91,0.2797,10.14,0.03768};
double[] B = new double[]{18,220,1.5,75,82,28.5,4,100,7,480};
double[] C = new double[]{1.81,1.4,1.05,1.42,1.81,1.92,1.1,1.35,1.08,1.85};点的公式是
Points = INT(A(B — P)^C) for track events (faster time produces a better score)
Points = INT(A(P — B)^C) for field events (greater distance or height produces a better score)"P“是个人记录(来自cvs)。我真的不明白如何从文件中正确地读到它只允许我用数字进行计算。我应该对cvs文件使用二维数组吗?这很让人困惑,我被困住了。
编辑
嗯,我相信以后输出到xml文件中,一维数组更好。我任务的重点是代码简单,但是CVS文件可以扩展到N行,所以我永远不知道它有多少行。我想在这段代码中使用数字数组:
double[] A = new double[]{25.4347,0.14354,51.39,0.8465,1.53775,5.74352,12.91,0.2797,10.14,0.03768};
double[] B = new double[]{18,220,1.5,75,82,28.5,4,100,7,480};
double[] C = new double[]{1.81,1.4,1.05,1.42,1.81,1.92,1.1,1.35,1.08,1.85};
double PTS;
double finalscore;
for (int i = 0; i < P.length;i++ )
{
finalscore=0;
if (i == 0)
{
PTS = A[i]* Math.pow((P[i]-B[i]),C[i]);
}
else if (i == 4)
{
PTS = A[i]* Math.pow((P[i]-B[i]),C[i]);
}
else if (i == 5 || i == 9)
{
PTS = A[i]* Math.pow((P[i]-B[i]),C[i]);
}
else
{
PTS = A[i]* Math.pow((P[i]-B[i]),C[i]);
}
finalscore = finalscore + PTS;
}
System.out.println(finalscore);
}}
其中P[]将是数组的第一车道的数字,没有名称。上面的代码似乎给了我结果NaN当我使用
double[] P = new double[]{12.61,5.00,9.22,1.50,60.39,16.43,21.60,2.60,35.81,5.272};发布于 2013-11-10 10:01:18
是的,你有正确的想法-你可以使用二维数组。我还建议您创建一个名为Person的类,因为这是Java编程,而且Java是面向对象的,但是如果您还没有研究创建多个类,您可以跳过这个位,只需使用两个数组,一个数组表示名称,一个数组表示数字。
对于一维数组方法
public class Person {
String name;
double[] scores;
int minutes;
int seconds;
int hundredths;
public Person(String line) {
String[] splitted = line.split(";");
name = splitted[0];
// now fill in the other fields
for(int i = 1; i < splitted.length - 1; i++) {
scores[i - 1] = Double.parseDouble(splitted[i]);
}
String times = splitted[splitted.length - 1].split("\\.");
minutes = Integer.parseInt(time[0]);
// etc. - fill in the rest
}
}(实际上,这可能是错误的,因为我认为大多数数字都是分数,但我猜它们实际上是秒和百分之一秒。这并不重要,除非你能有超过一分钟的时间来参加这些活动。)
然后,您需要在另一个类中有一个Person对象数组--让我们把它变得相当大,这样它就足够大了:
Person[] array = new Person[10000];现在有一个循环,每当从文件中读取line时,只需调用构造函数即可。
array[j] = new Person(line);不错的方法,不是吗?
https://stackoverflow.com/questions/19888092
复制相似问题