2016-08-16 2 views
1

Я создаю небольшую служебную программу. В этой программе я пытаюсь назначить массив объекту Java следующим образом: new Food(name, state, arrayOfSymptoms, comment, isCategory), где arrayOfSymptoms - это массив, с которым у меня проблемы.Дубликат первого индекса массива в приложении Java

Когда я отправляю содержимое массива в журнал вывода, [sym1, sym2, sym3, sym4].
Однако после завершения строительства массив выглядит следующим образом: [sym1, sym1, sym2, sym3, sym4]

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

Спасибо заранее!

Edit:

Код Перед конструктором:

 Symptoms[] allSyms = new Symptoms[selSyms.size()]; 
     for (int j = 0; j < selSyms.size(); j++) { 
      allSyms[j] = selSyms.get(j); 
      System.out.println("CurrSym(" + j + "): " + allSyms[j]); 
     } 

     System.out.println("Amount of symptoms selected: " + allSyms.length); 

     if(  // Basic Form Validation 
       !nameField.getText().isEmpty()) { 

      if (!isCategory.isSelected()) 
       MainController.makeLeaf(
         MainController.categoryTitles.indexOf(categories.getValue()), 
         new Food(
           nameField.getText(), 
           stateChoice.getSelectionModel().getSelectedIndex(), 
           allSyms, // Symptoms Here 
           "", 
           false) 
       ); 
     } 

Создает результат, показанный здесь:

CurrSym (0) Имя: Sym1, Комментарий: ""

CurrSym (1): Имя: Sym2, Комментарий: ""

CurrSym (2): Имя: Sym3, Комментарий: ""

CurrSym (3): Имя: Sym4, Комментарий: ""

Это ясно показывает, что массив содержит только 4 элемента. Однако, когда я преобразовать объект в JSON, выход становится, как показано ниже: {"title": "Test Food", "state": 0, "symptoms":[{"name":"Sym1","comment":""},{"name":"Sym1","comment":""},{"name":"Sym2","comment":""},{"name":"Sym3","comment":""},{"name":"Sym4","comment":""}],"comment": "", "isCategory": false}

Код для преобразования объекта в JSON выглядит следующим образом:

public String symptomsToJSON() 
{ 
    String allSymptoms = ""; 

    if(getSymptoms() != null) 
    { 
     for (int i = 0; i < symptoms.length; i++) { 
      if (i == 0) 
       allSymptoms += symptoms[i].toJSON(); 
      allSymptoms += "," + symptoms[i].toJSON(); 
     } 
    } 

    return allSymptoms; 
} 

public String toJSON() 
{ 
    return "{\"title\": \"" + title + "\", \"state\": "+ state + ", \"symptoms\":[" + symptomsToJSON() + "],\"comment\": \"" + comment +"\", \"isCategory\": " + isCategory + "}"; 
} 

Надежда эта новая информация помогает!

+3

Пожалуйста, покажите нам код. – Kode

+4

Обеспечьте [mcve]. – Gendarme

+0

Вы забыли про 'else' после' allSymptoms + = симптомы [i] .toJSON(); '. В противном случае 'allSymptoms + =", "+ симптомы [i] .toJSON();' будут всегда выполняться, что включает в себя, когда 'i == 0'. Голосование закрывается как опечатка. – Pshemo

ответ

0

Вы пропускаете 'еще' в symptomsToJSON():

public String symptomsToJSON() { 
String allSymptoms = ""; 
if(getSymptoms() != null) { 
    for (int i = 0; i < symptoms.length; i++) { 
     if (i == 0) 
      allSymptoms += symptoms[i].toJSON(); 
     //NOTE: Without this, the preceding line gets printed twice for i==0 
     else 
      allSymptoms += "," + symptoms[i].toJSON(); 
    } 
} 
return allSymptoms; 
} 

``

+0

* румянец * So noob fail xD Большое спасибо за ваше время! – DivineChili