Грамматическая ошибка,
if answer.include? word_array[iterations] == true
является избыточной, а также не цитируется правильно.
То, что вы пытались, было:
if answer.include?(word_array[iterations]) == true
Но Руби читает это как:
if answer.include? (word_array[iterations] == true)
Но правильный путь:
if answer.include? word_array[iterations]
[1122 ] Не нужно проверять, верно ли это, поскольку include?
даст вам true
или false
и уже может применяться к if
.
Например:
"abcd".include? 'a'
#=> true
"abcd".include? 'f'
#=> false
"abcd".include?('a') == true
#=> true
Как вы можете видеть, когда вы сравниваете true == true
, он все еще дает вам true
, так зачем вам их сравнивать?
О ошибка преобразования nil
, я думаю, это потому что это:
while iterations <= word.length
должно измениться на
while iterations < word.length
, поскольку максимальный индекс строки - это длина строки минус один. (От 0 до длины-1).
Кроме того, gets
будет вводить дополнительный \n
с ним, замените его на gets.chomp
.
Это является самым близким, можно добраться:
Bar bar;
if(foo!=null && (bar = foo.getBar())!=null){
System.out.println("Success: " + bar);
} else {
System.out.println("Failiure.");
}
если бы Вы хотите ограничить объем панели Панели, я добавил бы {и} вокруг кода, который отправил Michael.
void foo() { // some code ... // this block limits the scope of "Bar bar" so that the rest of the method cannot see // it. { Bar bar; if(foo!=null && (bar = foo.getBar())!=null){ System.out.println("Success: " + bar); } else { System.out.println("Failiure."); } } }
Вы могли бы также хотеть зарегистрироваться в шаблоне несуществующего объекта, если он имеет смысл. Я лично стараюсь избегать вещей, являющихся пустым, если я могу... действительно думать о том, если Вы хотите, чтобы пустой указатель был позволен или нет.
Я использовал ту технику при итерации по строкам от BufferedReader:
BufferedReader br = // create reader
String line
while ((line = br.readLine()) != null) {
// process the line
}
Так да, можно делать уроки, и результатом от этого будет переменная левой стороны, которую можно затем проверить. Однако не законно объявить переменные в тесте, поскольку они затем только были бы ограничены по объему к тому выражению.
От отдела "Мой Язык программирования Лучше, Чем Ваш Язык программирования": В Groovy, можно ли использовать"? ". оператор:
Bar bar = foo?.bar
if (bar != null) {
}
В Java, это - хороший шаблон (*):
Bar bar = foo == null ? null : foo.getBar();
if (bar != null) {
}
*: Что-то можно сохранить в кончиках пальцев.
Три точки, которым полностью не удается ответить на вопрос:
null
является злым. Не пишите методы, которые возвращают его. Ваша проблема в качестве примера затем исчезла бы.
я думаю, что Вы могли бы пропускать инкапсуляцию. Вместо foo.getBar()
интерфейс foo
мог быть сделан таким, что Вы выполняете, "говорят, не спрашивают" операцию?
Побочные эффекты в выражении имеет тенденцию вызывать плохой код. Предпочтите больше, более простые строки меньше, ошибочные строки. Обычное исключение при использовании ++
для постепенного увеличения индекса при доступе к буферу или подобному итератору разрабатывает алгоритмы.