Java не может найти символ для циклов, проблем логики? - PullRequest
1 голос
/ 01 февраля 2012

Хорошо, моя программа в этом конкретном разделе берет строку данных из строкового массива studentAnswer, значение которой будет примерно равно TTFFTFTFTF. Я должен взять это и сравнить его с массивом ключей, который может выглядеть как TFFFTFTFTF. Студент проходит тест, и моя программа правильно рассчитывает баллы.

Мое намерение состоит в том, чтобы использовать отдельный массив точек, чтобы найти числовую оценку для учащегося. Индекс studentAnswer относится к конкретному студенту. Так что studentAnswer[i] это TTFFTFTFTF. Я использую подстроки для сравнения каждого отдельного T / F с правильным ответом в key[], который будет иметь один T / F в каждом индексе. Затем, если они верны в своем ответе, я добавляю 1 к коррелирующему индексу в points[] и позже найду сумму points[], чтобы найти числовую оценку из десяти.

Моя проблема здесь в том, что строка origAns, используемая для определения исходной строки ответа учащегося, получает ошибку Java, не может найти Symbol. Я попытался поместить экземпляр origAns в каждый отдельный цикл for, но не могу заставить программу работать. Int i предназначен для того, чтобы следовать за каждым конкретным студентом - у меня есть четыре параллельных массива, которые все регистрируют идентификационный номер студента, числовую оценку, буквенную оценку и оригинальные ответы. Итак, это намерение i пройти каждого ученика. Затем j следует использовать, чтобы просмотреть каждую из этих исходных строк ответов ученика и сравнить ее с правильным ответом ... Логично, что для меня имеет смысл, куда бы я его положил, но ява не согласна. Пожалуйста, помогите мне понять эту ошибку!

for (int i = 0; i < studentAnswer.length; i++){
    String origAns = studentAnswer[i];
    for (int j = 0; j < key.length; j++){
        if (origAns.substring[j] == key[j]){
            //substring of index checked against same index of key
            points[j] = 1;
        }
        if (origAns.substring[j] != key[j]){
            points[j] = 0;
        }
    }
 }

Ответы [ 5 ]

2 голосов
/ 01 февраля 2012

Похоже, вы пытаетесь вызвать substring метод - но вы пытаетесь получить к нему доступ, как если бы это было поле.Итак, первое изменение будет:

if (origAns.substring(j) == key[j])

За исключением того, что будет сравниваться строка ссылки вместо содержимое , поэтому вы можете захотеть:

if (origAns.substring(j).equals(key[j]))

На самом деле, я подозреваю, что вы хотите, чтобы charAt получил один символ - substring вернет вам строку со всем после указанного индекса:

if (origAns.charAt(j) == key[j])

... где key будетa char[] здесь.

Вы также можете избежать "противоположного" сравнения, используя вместо этого предложение else.

Вам также следует сделать более аккуратный отступ кода для удобства чтения.Например:

for (int i = 0; i < studentAnswer.length; i++) {
    String origAns = studentAnswer[i];
    for (int j = 0; j < key.length; j++) {
        if (origAns.charAt(j) == key[j]) {
           points[j] = 1;
        } else {
           points[j] = 0;
        }
    }
}

И теперь вы можете изменить это, чтобы использовать выражение условное вместо if / else:

for (int i = 0; i < studentAnswer.length; i++) {
    String origAns = studentAnswer[i];
    for (int j = 0; j < key.length; j++) {
        points[j] = origAns.charAt(j) == key[j] ? 1 : 0;
    }
}
1 голос
/ 01 февраля 2012

Когда вы вызываете метод в Java, вы используете скобки () вместо скобок [].

Поскольку substring - это метод, вы должны вызывать его так:

if (origAns.substring(j) == key[j])

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

if (origAns.substring(j).equals(key[j]))

Кроме того, вы должны использовать charAt для извлечения одного символа в некоторой позиции в строке.substring(j) вернет строку символов, начинающуюся с позиции j.

if (origAns.charAt(j).equals(key[j]))
0 голосов
/ 01 февраля 2012

Если вы используете строку, используйте функцию charAt

String studentAnswer = "TTFFTFTFTF";
for (int i = 0; i < studentAnswer.length(); i++)
{
   char origAns = studentAnswer.charAt(i);
        }

Иначе, если вы используете массив символов, то

char studentAnswer[] = "TTFFTFTFTF".toCharArray();
        for (int i = 0; i < studentAnswer.length; i++){
            char origAns = studentAnswer[i];
        }
0 голосов
/ 01 февраля 2012

Подстрока - это функция, а не член объектов String.Посмотрите на пример в верхней части этой страницы:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

Обратите внимание на использование скобок вместо скобок.

0 голосов
/ 01 февраля 2012

Ваше объяснение очень длинное, и я не прочитал его от начала до конца.Но я вижу по крайней мере одну проблему в вашем коде:

if (origAns.substring[j] == key[j])

Вы сравниваете строки, используя == вместо использования метода equals():

if (origAns.substring[j].equals(key[j]))

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