java中的二维数组 - 困难

时间:2011-12-29 22:14:51

标签: java

我习惯了python和django,但我最近开始学习java。由于我没有多少时间因为工作而错过了很多课程而我现在有点困惑,因为我必须做一些工作。

修改
该计划假设根据每个运动员在自行车和比赛中所做的时间来归因于积分。我有4个额外的男女表,有点数和时数 我必须比较然后找到每次的相应点(线性插值)。

所以这是我读取文件的想法,并使用arrayList

我遇到困难的一件事就是创建一个二维数组 我有一个类似于这个的文件:

12    M    23:56    62:50
36    F    59:30    20:60

第一个数字是运动员,第二个是不同种族的性别和下一次(需要转换成秒数)。

由于我无法将数组混合(int和char),因此我必须将性别转换为0和1。

所以到目前为止我做了什么:

    public static void main(String[] args) throws FileNotFoundException {
        Scanner fileTime = new Scanner (new FileReader ("time.txt"));
        while (fileTime.hasNext()) {
            String value = fileTime.next();
            // Modify gender by o and 1, this way I'm able to convert string into integer
            if (value.equals("F"))
                value = "0";
            else if (value.equals("M"))
                value = "1";
            // Verify which values has :
            int index = valor.indexOf(":");
            if (index != -1) {
                String [] temp = value.split(":");
                for (int i=0; i<temp.length; i++) {
                    // convert string to int
                    int num = Integer.parseInt(temp[i]);
                    // I wanted to multiply the first number by 60 to convert into seconds and add the second number to the first
                   num * 60; // but this way I multiplying everything
            }
        }
        }   

我知道可能有更简单的方法可以做到这一点,但说实话,我有点困惑,欢迎任何灯光。

3 个答案:

答案 0 :(得分:5)

仅仅因为数组以一种语言存储数据并不意味着它是以另一种语言存储数据的最佳方式。

您可以创建自定义类的单个数组(或collection),而不是尝试创建二维数组。

public class Athlete {
  private int _id;
  private boolean _isMale;
  private int[] _times;
  //...
}

您打算如何使用数据可能会改变您构建类的方式。但这是您所描述的数据线的简单直接表示。

答案 1 :(得分:1)

Python是一种动态类型语言,这意味着您可以将每一行视为元组,或者甚至可以将其视为列表/数组。 Java习语在打字方面要更严格。因此,您的Java程序应该定义一个表示每行中信息的类,而不是列出元素列表,然后实例化并填充该类的对象。换句话说,如果你想用惯用的Java编程,这不是一个二维数组问题;这是一个List<MyClass>问题。

答案 2 :(得分:0)

尝试逐行阅读文件:

while (fileTime.hasNext())

而不是hasNext使用hasNextLine

阅读下一行而不是下一个令牌:

String value = fileTime.next();
// can be
String line = fileTime.nextLine();

将线分为四个部分,内容如下:

String[] parts = line.split("\\s+");

使用parts[0]parts[1]parts[2]parts[3]访问这些部分。你已经知道什么是什么了。轻松处理它们。