摆脱多余的声明

时间:2012-11-16 14:46:54

标签: java while-loop

有人可以查看这段代码并告诉我是否有办法将两个while语句合并为一个?

public static void main(String[] args) throws IOException
{
    BufferedReader fileInput;
    fileInput = new BufferedReader(new FileReader("information.txt"));
    int countOfClients = 0;
    while (fileInput.ready())
    {
        fileInput.readLine();
        countOfClients ++;
    }
    int totalClients = countOfClients ;

    Client[] clientDetails = new Client[totalClients];
    int clientNumber = 0;

    while (fileInput.ready())
    {
        String currentLineOfText = fileInput.readLine();
        String clientName = currentLineOfText.substring(0, 19);
        String gender = currentLineOfText.substring(20,21);
        char clientGender = gender.charAt(0);
        int clientAge = Integer.parseInt(currentLineOfText.substring(22,24));
        String clientInterests = currentLineOfText.substring(25);
        clientDetails[clientNumber] = new Client(clientName, clientGender, clientAge, clientInterests);
        clientNumber++;
    }

第一个while语句正在读取文本中的所有行,因此它知道它需要的对象数组中有多少个元素。
然后创建类Client []的数组clientDetails 第二个while语句填充该数组 我可以避免使用两个while语句吗?

注意:这是一项作业,我必须使用数组。

5 个答案:

答案 0 :(得分:1)

正如他们所说的那样,使用ArrayList存储项目。

如果内存有问题,可以使用ArrayList.toArray()将其修剪为裸骨。

如果效率是一个问题,你可能不应该在第一个地方读取文件。

答案 1 :(得分:0)

为什么要创建数组?为什么没有一个while循环创建ArrayList然后(如果你需要一个数组)使用ArrayList.toArray()从中提取结果数组?

答案 2 :(得分:0)

您可以使用ArrayList代替数组,只需使用:

list.add(new Client(...));

如果你真的需要一个阵列,你可以随时致电:

Client[] array = list.toArray();

答案 3 :(得分:0)

通过将Client[]更改为ArrayList();

,可以避免两个while循环

示例:

List<Client> clientDetails = new ArrayList<Client>();
    int clientNumber = 0;

    while (fileInput.ready())
    {
        String currentLineOfText = fileInput.readLine();
        String clientName = currentLineOfText.substring(0, 19);
        String gender = currentLineOfText.substring(20,21);
        char clientGender = gender.charAt(0);
        int clientAge = Integer.parseInt(currentLineOfText.substring(22,24));
        String clientInterests = currentLineOfText.substring(25);
        clientDetails.add( new Client(clientName, clientGender, clientAge, clientInterests));
    }

注意:手动编辑,可能存在语法错误。

答案 4 :(得分:0)

如果你真的不能使用预先编写的ArrayList类,你总是可以自己有效地重新实现它(或者至少是它的相关部分)。

关键技术是猜测你可能需要的数组的大小,定义一个大小的数组,如果你发现它太小,创建一个更大的数组并复制旧的所有现有值在继续留在遗留的空间之前,到新阵列。

在循环的另一端,你可能正在进行另一步,并再次缩小数组(通过声明一个较小的数组并复制值),这样你就没有空的空格了。

或者,正如所有其他答案所推荐的那样,只需使用一个ArrayList,它已经为你完成了这个......