2014-10-14 1 views
0

Я подсчитываю, сколько учеников ответило на опрос Question1 на Question17.Ответ на опрос, который будет учитываться в массиве

  • Q1 до Q15 является подобием вопросы (категорически не согласен/не согласен/согласен/полностью согласен)
  • Q16 является Да/Нет вопрос: Do you go to the lab?
  • Если студенты отвечают Да (= 2), то Q17 - вопрос подобия. Если Q16 не Нет (= 1), а затем пропустить Q17

Я могу рассчитывать с Q1 до Q15, как показано в приведенных ниже кодов, но я не могу иметь дело с Q16 (г/л). Для вывода необходимо показать Q1-Q15, пропустить Q16 и показать Q17. У меня также есть другой стол, tblSurveyQuestion(questID, questType, question). В Q16, questID = Survey16, questType = "Y".

Не могли бы вы показать мне, как вставить код для работы с Q16? Мой код до сих пор:

'assume dt is a datatable that is declared and the connection works 
    Dim ans(16, 3) As Integer  '17 questions with Q16 is a y/n question 
    For I As Integer = 0 To dt.Rows.Count - 1 
     If dt.Rows(I).Item(2) = 1 Then 
      Dim Answer1() As String = dt.Rows(I).Item(3).Split(";") 
      For j1 As Integer = 0 To 16  
       Dim k1 As Integer = (Val(Answer1(j1))) 
       ans(j1, k1 - 1) += 1 
      Next 
     End If 
    Next 
+0

Где и как вы показываете Вопросов позже? Вы используете массив 'ans'? Вероятно, вам также нужно посмотреть на свой счетчик 'j1' (если результат вопроса засчитывается' j1'): либо при оценке результата, либо позже при отображении ответов. – pasty

+0

Я объявляю данные, добавляю столбцы и строки к набору данных, чтобы отображать их в отчете VS2010/Wins Form/ReportViewer. Коды выше работают только для q1-q15. Однако, когда я сталкиваюсь с q17 (я могу пропустить q16 b/c, мне нужны только значения в q17), я получаю ошибку b/c q17 либо вопрос о подобии, либо 0 (N/A). Если q17 = 0, ans (j1, k1-1) = ans (-1) => ошибка! Помогите! – user3754205

+0

Можете ли вы опубликовать пример строки, которую вы раскалываете, чтобы получить ответы (строка, содержащая все ответы, справа)? – pasty

ответ

0

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

У вас уже есть оцененный ансер из Вопроса 16 в ans(15), поэтому вам просто нужно проверить, находитесь ли вы в индексе 16 (= Вопрос17) или нет, и обрабатываете результат ans(15). Одной из возможностей было бы использовать:

Вам нужно:

  • объявить переменную для хранения результата оценки Question16
  • при оценке Вопрос17 проверить сохраненный результат Вопроса16
  • действовать соответствующим образом (например, не экономя Question17 или не показывать его)

Очень простое решение может выглядеть следующим образом:

'assume dt is a datatable that is declared and the connection works 
Dim ans(16, 3) As Integer  '17 questions with Q16 is a y/n question 
For I As Integer = 0 To dt.Rows.Count - 1 
    If dt.Rows(I).Item(2) = 1 Then 
     Dim Answer1() As String = dt.Rows(I).Item(3).Split(";") 
     'declare a store for the answer of question 16 
     Dim answer16IsPositive as Boolean = False 
     For j1 As Integer = 0 To 16 
      Dim k1 As Integer = (Val(Answer1(j1))) 
      ans(j1, k1 - 1) += 1 
      If (j1 = 15) ' we are at the 16th answer 
       If (k1 = 1) 'save result of answer 16! 
        answer16IsPositive = True 
       End If 
      End If 
      If (j1 = 16) ' we are at the 17th answer 
       If (Not answer16IsPositive) 
        ' deal with answer 17! 
       'Else 
       ' do nothing 
       End If 
      End If 
     Next 
    End If 
Next 
+0

Большое спасибо, пастообразный. Но когда я его отлаживаю, я сталкиваюсь с ошибкой: Когда j1 = 15, флаг установлен на True. Затем он пропускает j1 = 16, переходя к следующему внутреннему циклу, j1 = 16, Answer1 (16) = 0; поэтому k1 = 0.Если k1 = 0, то ans (16, -1) выдает ошибку. Можете ли вы изменить свой код? К сожалению, я забыл сообщить вам, что q17 имеет ответ на сходство ИЛИ 0 (не относится) – user3754205

+0

Вы можете взять мой код в качестве справочника и изменить его в соответствии с вашими потребностями. Может быть, если вы просто измените условие if ('k1 <> 1'), это сработает? – pasty