Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 从具有char和int的CSV读取_Java_Arrays_Csv - Fatal编程技术网

Java 从具有char和int的CSV读取

Java 从具有char和int的CSV读取,java,arrays,csv,Java,Arrays,Csv,我有个任务。Java Decathlon程序的输入是一个类似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

我有个任务。Java Decathlon程序的输入是一个类似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);
}

是的,你有正确的想法-你可以使用二维数组。我还建议您创建一个名为
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
   }
}
现在有一个循环,只要从文件中读取
,就可以调用构造函数

array[j] = new Person(line);

很好的方法,不是吗?

我注意到一个问题。CSV文件每行上的最后一个“数字”不是一个数字-它有两个句点,而不是一个,因此它们不能是小数点。它是什么,它意味着什么?它是一个时间-分,秒,然后百分之一秒?因为这是体育运动,我想是的。你能确认一下吗?是的,它是分、秒和百分之一秒。我编辑了我的示例,只是想看看它是否有效。稍后我会将P[]最后一个数字改为秒。我不清楚你的代码是什么。在这种情况下,并不是每个数字都是时间:第一、第五、第六和最后一个数字是时间(秒和百分之一百或分、秒和百分之一百),其他数字是米。我可以自己计算并输入XML文档,但我不知道如何读取txt文件。我可以将文件内容放入二维数组中,但它会将名称作为第一项,不允许我进一步计算。我希望它能给你更多关于我的问题的信息,如果你没有问我一些具体的问题,如果你在mindWell中问过面向对象的解决方案,但显然你不理解面向对象。还是怎样当你说“我不懂你的代码”但你不说你不懂的东西时,这是非常恼人的。啊,我懂你的代码了,现在你从CVS中取名字,把它放在拆分的[0]中,分数到分数[I-1](因为总行长是10)。我不需要将时间拆分为分秒和百分之一百,因为常数(从A[]B[]C[])都是秒。百分之一百或米。厘米。我只需要理解文件中的读取部分。你向我展示了一个很好的方法如何存储到数组中,但我需要如何正确地读取文件以便存储。我祈祷我能为你把它弄得更清楚。谢谢你的快速回放。我真的很感激你能从文件中读取你需要的内容se:
BufferedReader buf=new BufferedReader(new FileReader(“myfile.csv”);
然后你可以说
String line=buf.readLine()
来读一行。这是你可以在谷歌上找到的标准Java代码。
Person[] array = new Person[10000];
array[j] = new Person(line);