двумерные массивы и ввод / сортировка - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь добавить все двойные числа между двумя <end> экземплярами в массив списков (в каждом индексе <end> есть двойные числа между <end> с и т. Д.)

ArrayList<ArrayList<Double>> myArr = new ArrayList<ArrayList<Double>>();
int j = 0;
int nLine = 0;

    while(scan.hasNext()) {
        String line = scan.next();

        //System.out.println(line);
        if(!line.equals("<end>")) {
            nLine = Double.valueOf(line);
            ArrayList<Double> row = new ArrayList<Double>();
            myArr.add(row);


            row.add(j, nLine);
            j=j++;

        } else {
            j=j++;
        }
    }

В нынешнем виде код помещает один массив в массив (в отличие от всех между операторами; таким образом, результат выглядит следующим образом: [[1.4], [3], [15], [3.2] и т. Д. И т. П.

, где я хочу, чтобы это выглядело так: [[1.4, 3, 15, 3.2], [5, 13.4], [954.3 и т. Д ....

Файл, который он сканирует, по сути:

<end>
1.4
3
15
3.2
<end>
5
13.4
<end>
954.3
43 etc. etc. (infinitely)

Моя цель (в конечном итоге) - подсчитать, сколько двойников содержится в каждом индексе arrayList, и убедиться, что ни один из этих двойников не совпадает,и убедиться, что в каждом массиве строк содержится не более 10 значений. Поэтому я застрял, и любая помощь приветствуется.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 30 января 2012

Вы можете использовать HashSet как способ отслеживания дубликатов (или, лучше, использовать вместо этого ArrayList of Sets, чтобы избежать дополнительной структуры данных)

Вот пример генерации случайного числа ArrayListsбез дупс:

ArrayList<ArrayList<Integer>> myArr = new ArrayList<ArrayList<Integer>>();      
HashSet<Integer> duplicates = new HashSet<Integer>();
Random random = new Random();

for(int x=0; x<3; x++) {
    ArrayList<Integer> row = new ArrayList<Integer>();
    myArr.add(row);
    for(int y=0; y<3; y++) {
        int randomInt = random.nextInt(100);
        if(!duplicates.contains(randomInt)) {
            row.add(0,randomInt);
            duplicates.add(randomInt);
        }
    }
}

for(int i=0;i<myArr.size();i++)
{
    System.out.println(myArr.get(i));
}
0 голосов
/ 30 января 2012
ArrayList<ArrayList<Double>> myArr = new ArrayList<ArrayList<Double>>();
int nLine = 0;

ArrayList<Double> currArr = null;

while(scan.hasNext()) {
    String line = scan.next();

    if(!line.equals("<end>")) {
        nLine = Integer.valueOf(line);

        currArr.add(nLine);
    } else {
        if(currArr!=null) myArr.add(currArr);

        currArr = new ArrayList<Double>();
    }
}

if(currArr!=null) myArr.add(currArr);

В середине кода вы используете Integer вместо Double.Не уверен, почему так я оставил это.Код предполагает, что ввод всегда начинается с <end>.

...