Как заполнить «рваный» массив значениями читаемого текстового файла? - PullRequest
0 голосов
/ 30 июля 2010

Я новичок в Stack Overflow, и это мой первый вопрос / пост! Я работаю над проектом для школы с использованием Java. Первая часть у меня проблемы с inolves:

  1. Читать каждую строку в файле (указан в конце моего поста) один раз
  2. Создайте «рваный» массив целых чисел, 4 по X , где мои 4 строки будут столбцом «номер региона» (число, найденное в Nbr of Region), и заполните каждый столбец население штата для этого региона .

Так, например, строка 1 будет содержать совокупность состояний региона 1, в результате чего получится 6 столбцов, строка 2 представляет регион 2, в результате будет 7 столбцов, и т. Д., Что приведет к появлению «рваного» массива.

Мой вопрос заключается в том, как заполнить или каков будет лучший способ заполнить мой массив результатами чтения моего файла? Я знаю, как объявить массив, инициализировать массив и создать пространство в массиве, но я не уверен, как написать свой метод в моем классе State, чтобы заполнить результаты моего файла, считанного в массив. Прямо сейчас я получаю сообщение об ошибке, когда пытаюсь скомпилировать этот код с использованием Netbeans.

Вот мой код для Main и State. мой входной файл указан под ним:

import java.util.*;
import java.io.*;

public class Main
{
    public static void main(String[] args) throws IOException
    { 
        // create new jagged array obj and fill it with some
        // initial "dummy" values
        int[][] arrPopulation =
        {
            {0,1,2,3,4,5},
            {0,1,2,3,4,5,6},
            {0,1,2,3,4,5,6,7,8,9},
            {0,1,2,3,4,5,6,7,8,9,10}
        };//end array declaration

        // read in file States.txt, instantiate BufferedReader object,
        // set new BufferedReader object to variable @newLine
        FileReader f = new FileReader("States.txt");
        BufferedReader br = new BufferedReader(f);
        String newLine = br.readLine();

        for (int rows = 0; rows < arrPopulation.length; rows++)
        {
            for (int col = 0; col < arrPopulation[col].length; col++) {
                System.out.print(arrPopulation[rows][col] + " ");
            }
            // display on new lines; print out in a "table" format
            System.out.println();
        } // end for

        State newState = new State(newLine);
        int count = 0;
        while(newLine != null)
        {
            newLine = br.readLine();
            System.out.println(newState.getRegionNum());
        }// end while
        br.close();//close stream
    } // end public static void main
} // end main

Это то, что у меня есть для класса State на данный момент:

import java.util.*;

public class State
{
    private String statePop, stateNum, regionNum;

    public State(String fileRead)
    {
        statePop = fileRead.substring(32,39);
        regionNum = fileRead.substring(55,fileRead.length());
    } // end constructor

    public int getStatePop()
    {
        int population = Integer.parseInt(statePop);
        return population;
    } // @method getStatePop end method

    public int getRegionNum()
    {
        int numOfRegion = Integer.parseInt(regionNum);
        return numOfRegion;
    }// end getRegionNum

    public int getAvgPop()
    {
        int average = 2+2;
        return average;
        // total number of populations
        // divide number of populations
    }// @return the average population of states

    public int getStateTotal()
    {
        //initialize static variable
        int totalPopulation = 0;
        int stateTotal = this.getStatePop() + totalPopulation;
        return stateTotal;
    } // @return stateTotal

    public String toString()
    {
        return statePop + " " + stateNum + " ";
    } // @method end toString method
} // end State class

Имена столбцов (не используются в файле для чтения, только для пояснения):

Столица государства Аббревиат Население Регион Нбр Региона

Washington     Olympia        WA 5689263West           6
Oregon         Salem          OR 3281974West           6
Massachusetts  Boston         MA 6147132New_England    1
Connecticut    Hartford       CT 3274069New_England    1
Rhode_Island   Providence     RI  988480New_England    1
New_York       Albany         NY18146200Middle_Atlantic2
Pennsylvania   Harrisburg     PA12001451Middle_Atlantic2
New_Jersey     Trenton        NJ 8115011Middle_Atlantic2
Maryland       Annapolis      MD 5134808Middle_Atlantic2
West_Virginia  Charleston     WV 1811156Middle_Atlantic2
Delaware       Dover          DE  743603Middle_Atlantic2
Virginia       Richmond       VA 6791345Middle_Atlantic2
South_Carolina Columbia       SC 3835962South          3
Tennessee      Nashville      TN 5430621South          3
Maine          Augusta        ME 1244250New_England    1
Vermont        Montpelier     VT  588632New_England    1
New_Hampshire  Concord        NH 1185048New_England    1
Georgia        Atlanta        GA 7642207South          3
Florida        Tallahassee    FL14915980South          3
Alabama        Montgomery     AL 4351999South          3
Arkansas       Little_Rock    AR 2538303South          3
Louisiana      Baton_Rouge    LA 4368967South          3
Kentucky       Frankfort      KY 3936499South          3
Mississippi    Jackson        MS 2752092South          3
North_Carolina Raleigh        NC 7546493South          3
California     Sacramento     CA32182118West           6
Idaho          Boise          ID 1228684West           6
Montana        Helena         MT  880453West           6
Wyoming        Cheyenne       WY  480907West           6
Nevada         Carson_City    NV 1746898West           6
Utah           Salt_Lake_City UT 2099758West           6
Colorado       Denver         CO 3970971West           6
Alaska         Juno           AK  614010West           6
Hawaii         Honolulu       HI 1193001West           6

Я на правильном пути?

Спасибо за любую помощь заранее, и извините за длинный пост!

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Здесь будет полезен пакет коллекций.

  1. Создать карту <Целое число, Список <<Целое число>>
  2. Когда вы сканируете файл по одной строке, возьмитеномер региона и население.
    1. Является ли номер региона ключом на карте?
      1. Нет.Затем создайте новый список и добавьте его на карту.Теперь это.
    2. Добавить население в список.
  3. Теперь на карте должно быть четыре записи.Создайте внешний массив, например: int [] [] array = new int [4] [];
  4. Затем выполните итерации по спискам на карте и заполните внешний массив, например: array [i] = new int [list.size ()];
  5. Затем выполните итерации по списку и заполните внутренний массив, например: array [i] [j] = list.get (j);
0 голосов
/ 30 июля 2010

спасибо за ваш быстрый ответ.

Мой профессор еще не изучил пакет «Коллекции» (глядя на некоторые классы в пакете, я думаю, что мы рассмотрим эти вещи в следующем семестре), поэтому я не слишком знаком с картойинтерфейс.Кроме того, я думаю, что он хочет, чтобы мы специально использовали массивы, хотя он действительно сказал, что мы можем использовать ArrayList ...

До тех пор, пока я не прочитал ваш пост, я переписывал свой кодв очередной попытке решить проблему.Я собираюсь посмотреть на интерфейс Map, но из любопытства я близок к следующему коду?Похоже, мне просто нужно исправить одну строку, чтобы исправить мою ошибку «за пределами» ...

import java.util.*;
import java.io.*;

public class Main
{
    public static void main(String[] args) throws IOException
    {
        // read in file States.txt, instantiate BufferedReader object,
        // set new BufferedReader object to variable @newLine
        FileReader f = new FileReader("States.txt");
        BufferedReader br = new BufferedReader(f);
        String newLine = br.readLine();

        //declare jagged array
        int[][] arrPopulation;
        arrPopulation = new int[4][];

        //create state object, and get 
        State newState = new State(newLine);      

        //read file
        int col = 0;

        arrPopulation[0] = new int[col];
        arrPopulation[1] = new int[col];
        arrPopulation[2] = new int[col];
        arrPopulation[3] = new int[col];

        int stateRegion = newState.getRegionNum();

        while (newLine != null)
        {
            switch (stateRegion)
            {
                case 1:

                    arrPopulation[0][col] = newState.getStatePop();
                    System.out.println("Population added:" +
                            arrPopulation[0][col]);//test if col was created
                    col++; //increment columns
                    break;
                case 2:

                    arrPopulation[1][col] = newState.getStatePop();
                    col++; //increment columns
                    break;
                case 3:

                    arrPopulation[2][col] = newState.getStatePop();
                    col++;
                    break;
                case 6:
                    arrPopulation[3][col] = newState.getStatePop();
                    System.out.println("Population added:" +
                            arrPopulation[3][col]);
                    col++; //increment columns
                    break;
            }
            br.readLine();
        }//endwhile
        br.close();//close stream
    } // end public static void main
} // end main

Извините, если я должен поместить все это в раздел комментариев, однако, я достиг своего предела персонажаи не смог опубликовать мой код.Еще раз спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...