Я пытался заставить это работать, но я не совсем уверен, где я иду не так. Это будет иметь смысл с тестовым набором чуть позже. Несколько вещей о том, что я делаю. Список должен содержать одну или несколько строк. Если нет хотя бы одной строки, генерируется исключение IllegalArgumentException. Каждая строка имеет своего рода строку, затем символ табуляции, затем двойную, а затем новую строку. Если какие-либо строки не следуют этому шаблону, то также генерируется исключение IllegalArgumentException. В идеале это должно работать, если вы создали любое количество списков, поэтому я попытался сделать это следующим образом
По сути, программа должна получить список, скажем что-то вроде ...
California 6
Nevada 11
California 1
California 14
Arizona 21
Utah 2
California 7
Utah 10
Nevada 3
Utah 2
и должен возвращать что-то вроде этого:
California {6, 1, 14, 7}
Arizona {21}
Utah {2, 10, 2}
Nevada {11, 3}
Обратите внимание, что для примера я использовал только четыре. Я пытаюсь получить его так, чтобы он работал с любым количеством списков. Вот мой код ...
public static TreeMap<String, ArrayList<Double>> readTable (Scanner dataSource)
{
ArrayList<String> dataFromFile = new ArrayList<String>();
while(dataSource.hasNext()){
dataFromFile.add(dataSource.next());
}
//Populate TreeMap
ArrayList<Double> statePopData = new ArrayList<>();
TreeMap<String, ArrayList<Double>> map = new TreeMap<>();
for (int i = 0; i < dataFromFile.size(); i++) {
boolean isDouble;
String state = "";
try {
Double.parseDouble(dataFromFile.get(i));
isDouble = true;
} catch (NumberFormatException | NullPointerException nfe) {
isDouble = false;
}
if(isDouble) {
statePopData.add(Double.parseDouble(dataFromFile.get(i)));
} else { //means its a string
statePopData.clear();
state = dataFromFile.get(i);
}
if (statePopData.isEmpty()) {
map.put(state, statePopData);
}
} return map;
}
Я продолжаю получать одно и то же значение для всех для всех других состояний в списке, и я не понимаю, почему это происходит.
Вот тестовый пример, о котором я упоминал ранее ...
@Test
public void testReadTable ()
{
try (Scanner scn = new Scanner(
"Utah\t10\nNevada\t3\nUtah\t2\nCalifornia\t14\nArizona\t21\nUtah\t2\nCalifornia\t7\nCalifornia\t6\nNevada\t11\nCalifornia\t1\n"))
{
TreeMap<String, ArrayList<Double>> actual = GraphingMethods.readTable(scn);
TreeMap<String, ArrayList<Double>> expected = new TreeMap<>();
ArrayList<Double> azList = new ArrayList<>();
azList.add(21.0);
expected.put("Arizona", azList);
ArrayList<Double> caList = new ArrayList<>();
caList.add(6.0);
caList.add(1.0);
caList.add(14.0);
caList.add(7.0);
expected.put("California", caList);
ArrayList<Double> nvList = new ArrayList<>();
nvList.add(11.0);
nvList.add(3.0);
expected.put("Nevada", nvList);
ArrayList<Double> utList = new ArrayList<>();
utList.add(2.0);
utList.add(10.0);
utList.add(2.0);
expected.put("Utah", utList);
assertEquals(expected, actual);
}
}
Я новый программист, поэтому любые советы будут с благодарностью! Я хотел бы знать, что я делаю неправильно, чтобы я мог узнать больше. :)