Я хочу иметь две переменные цикла разных типов. Есть ли способ заставить это работать?
@Override
public T get(int index) throws IndexOutOfBoundsException {
// syntax error on first 'int'
for (Node<T> current = first, int currentIndex; current != null;
current = current.next, currentIndex++) {
if (currentIndex == index) {
return current.datum;
}
}
throw new IndexOutOfBoundsException();
}
first
? Это нигде не заявлено. Это член класса?Ответы:
Инициализация
for
заявления следует правилам деклараций локальных переменных .Это было бы законно (если глупо):
for (int a = 0, b[] = { 1 }, c[][] = { { 1 }, { 2 } }; a < 10; a++) { // something }
Но попытка объявить отдельные типы
Node
и поint
своему усмотрению недопустима для объявлений локальных переменных.Вы можете ограничить объем дополнительных переменных в методах, используя такой блок:
{ int n = 0; for (Object o = new Object();/* expr */;/* expr */) { // do something } }
Это гарантирует, что вы случайно не повторно используете переменную в другом месте метода.
источник
Тебе это не может понравиться. Либо вы используете несколько переменных одного типа,
for(Object var1 = null, var2 = null; ...)
либо извлекаете другую переменную и объявляете ее перед циклом for.источник
Просто переместите объявления переменных (
Node<T> current
,int currentIndex
) за пределы цикла, и все должно работать. Что-то вроде этогоint currentIndex; Node<T> current; for (current = first; current != null; current = current.next, currentIndex++) {
а может даже
int currentIndex; for (Node<T> current = first; current != null; current = current.next, currentIndex++) {
источник
мы не можем инициализировать различные типы данных в цикле for в соответствии с их дизайном. Я просто привожу небольшой пример.
for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){ //Your Code goes here }
источник