Цикл for с двумя переменными с: Цикл for в C++ | Уроки С++ – синтаксис, примеры и возможные ошибки

Инициализация цикла for с двумя переменными (java, for-loop)

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

for (int i = 1, k = 2; i<=4000000; i++ ) {

}

Я немного написал о синтаксисе for циклов в ответ на типы, разрешенные для объявлений переменных цикла. Это не совсем тот же вопрос, но ответ здесь имеет смысл, я тоже думаю.

В общем, вы можете посмотреть спецификацию языка Java for оператора for. Вы можете объявить и инициализировать любой тип переменной в цикле for и даже объявить несколько переменных, если они все одинаковы. Соответствующие постановки в грамматике:

BasicForStatement:
    for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement

ForInit:
    StatementExpressionList
    LocalVariableDeclaration

LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

VariableDeclarators:
    VariableDeclarator
    VariableDeclarators , VariableDeclarator

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

for ( ; … ; … )                         // no variable declaration at all
for ( int i; … ; … )                    // variable declaration with no initial value
for ( int i=0; … ; … )                  // variable declaration with initial value
for ( int i=0, j=1; … ; … )             // multiple variables
for ( final Iterator<T> it = …; … ; … ) // final variable

Четвертый случай - тот, с которым вы сейчас озабочены.

В стороне, ForInit также может быть StatementExpressionList, что означает, что вместо объявления и инициализации переменных вы также можете просто выполнить некоторые утверждения. Например, вы можете это сделать (но это не очень полезный пример):

for ( System.out.println( "beginning loop" ; … ; … )

Не могу понять для цикла с двумя переменными

Когда я использую две переменные в цикле for с разными условиями два условия, как я использовал ниже i<3,j<2 цикл for всегда выполняется до тех пор, пока второе условие не завершится неудачей.

#include<iostream>
#include<conio.h>
using namespace std ;
int main()
{
int i,j ;
for(i=0,j=0;i<3,j<2;i++,j++)
{
    cout<<"hello" ;
}
getch() ;
return 0 ;
} 

В этом коде hello печатается 2 раза. Почему?

Если я использую i<3,j<10, то "Hello" печатается 10 раз. Я не могу понять, почему пренебрегают первым условием. Это зависит от компилятора или что-то еще?

Все работает нормально, если я заменяю условия типа | / (OR) или &&(AND).An другое дело, что я не могу инициализировать i и j в самом цикле for, это показывает мне ошибку, но работает нормально, когда я объявляю переменные в стиле C или одну переменную вне цикла for, почему это так?

Компилятор, который я использовал, - Orwell Dev C++.
Заранее спасибо.

c++ loops for-loop declaration

Поделиться Источник Arun     05 октября 2013 в 05:43

3 Ответа



7

for(i=0,j=0;i<3,j<2;i++,j++)

эквивалентно

for(i=0,j=0;j<2;i++,j++)

Выражение с запятой принимает значение последнего выражения.

Какое бы условие ни было первым, оно будет проигнорировано, и будет использовано только второе.

Поделиться P0W     05 октября 2013 в 05:47



7

Цикл for состоит из:

for(START_STATEMENT; CONDITION_EXPRESSION, LOOP_EXPRESSION) BODY_BLOCK

Где:

  • START_STATEMENT - это любой отдельный оператор,который может включать в себя объявление переменной. Если вы хотите объявить 2 переменные, вы можете написать int i=0, j=0, но не int i=0; int j=0 , потому что последние на самом деле являются 2 операторами. Также узел, что объявление переменной является частью оператора, но не может быть частью (sub) выражения . Вот почему int i=0, int j=0 также было бы неверно.

  • CONDITION_EXPRESSION - это любое одиночное выражение, которое вычисляется до логического значения. В вашем случае вы используете оператор coma

    , который имеет следующую семантику: A, B будет делать:

    • оцените A (он будет оценивать, а не просто игнорировать)
    • канава результат а
    • оценка B
    • вернуться Б в результате

    В вашем случае: i<3,j<2 вы сравниваете i<3 , вы просто игнорируете результат этого сравнения.

    Запятые выражения полезны, когда инструкции имеют некоторые побочные эффекты, помимо простого возврата значения. Общие случаи: переменная инкремент / декремент или оператор присваивания.

  • LOOP_EXPRESSION - это любое отдельное выражение, которое не должно ни к чему приводить. Здесь вы снова используете выражение с запятой, игнорируя результат left-hand-side. Однако в этом случае вы все равно не используете результат, а просто используете побочный эффект++, который заключается в увеличении значений ваших переменных.

  • BODY_BLOCK - это либо отдельный оператор, либо блок, заключенный в фигурные скобки.

Вышеуказанное for можно сравнить с:

{
    START_STATEMENT;
    while(EXPRESSION) {
        BODY_BLOCK;
        LOOP_EXPRESSION;
    }
}

Поделиться CygnusX1     05 октября 2013 в 07:11



-1

c complier всегда использовал второе условие.

поэтому используется j<2.

используйте это для цикла

      for(i=0,j=0;j<10;i++,j++)

Поделиться Dev     05 октября 2013 в 05:51


Похожие вопросы:


Python: C для цикла с двумя переменными

Я новичок в python. Есть ли аналогичный способ написать этот C для цикла с 2 переменными в python? for (i = 0, j = 20; i != j; i++, j--) { ... }


для контура с двумя переменными условия

Сегодня на экзамене я получил вопрос о цикле for с двумя переменными (вопрос ниже ) почему вывод кода имеет одну строку, когда я даю два оператора System.out.println. цикл открытого класса { public...


Vue.js: v-для итерации с двумя переменными

Можно ли написать V-для итерации с двумя переменными? Я пробовал что-то вроде этого, но это не работает <ul id=example-1> <li v-for=apple in apples v-for=banana in bananas> {{ apple...


Не могу понять сводку регрессии с фиктивными переменными

Поэтому я просто запустил линейную модель, которая в основном regrex5 = lm(children ~ age + educ + electric + usemeth + educ*usemeth) В которой eletric и usemeth являются фиктивными переменными....


Точечная диаграмма с двумя категориальными переменными и двумя количественными переменными

У меня есть проблема с созданием точечного рисунка. У меня есть фрейм данных distribution_tab с 4 столбцами и 6 строками. Два первых столбца являются количественными переменными, а два...


Решение системы с двумя уравнениями и двумя переменными в цикле for

Я хотел бы решить систему с двумя уравнениями и двумя переменными. Tau(i) и Roh(i) -входные массивы. Tau=[0.91411 0.91433 0.91389 0.91399 0.91511 0.915] Roh=[0.07941 0.07942 0.07952 0.07946 0.07951...


Определите повторение с двумя переменными

Меня попросили определить и решить повторение T (n), а также представить его в нотации Big-O, но я запутался с двумя переменными. Я думаю, что я имею дело с f(m,n) = 1 + f(m+1,n-3) для n>1 , и...


Использование grep с двумя переменными

Я хочу использовать grep с двумя переменными в скрипте shell var = match cat list.txt | while read word_from_list; do grep $word_from_list $var >> words_found.txt done Но grep ожидает получить...


Для цикла с двумя переменными в TCL

Я хочу преобразовать следующий код c в TCL. int a[10],b[10]; int n=20 for (i=1,j=1; i<=n; i+=2,j++) { b[j]=a[i]; } Мне нужно изменить этот цикл на TCL, я не хочу использовать функцию foreach в...


Можно ли использовать новый цикл for в Java с двумя переменными?

Мы можем использовать старый цикл for ( for(i = 0, j = 0; i<30; i++,j++) ) с двумя переменными Можно ли использовать цикл for-each (или расширенный цикл for) В java ( for(Item item : items) с...


Инициализация цикла for с 2 переменными

Я действительно не понимаю, почему это не сработает...

    for (int i = 1, int k = 2; i<=4000000; i++) {

    }

Пока это будет...

    for (int i = 1; i<=4000000; i++) {

    }

Мне нужно инициализировать две переменные, но когда я попробую первый код, он не будет компилироваться, код выглядит правильно??

java for-loop

Поделиться Источник Jerry Murphy     08 февраля 2014 в 14:18

4 Ответов



3

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

for (int i = 1, k = 2; i<=4000000; i++ ) {

}

Я немного написал о синтаксисе for циклов в ответ на типы, разрешенные в объявлениях переменных цикла? Это не совсем тот же вопрос, но ответ имеет смысл и здесь, я думаю.

В общем, вы можете взглянуть на спецификацию языка Java для оператора for . Вы можете объявить и инициализировать любой тип переменной в цикле for , и даже можете объявить несколько переменных, если они все одного типа. Соответствующие производства в grammar являются:

BasicForStatement:
    for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement

ForInit:
    StatementExpressionList
    LocalVariableDeclaration

LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

VariableDeclarators:
    VariableDeclarator
    VariableDeclarators , VariableDeclarator

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

for ( ; … ; … )                         // no variable declaration at all
for ( int i; … ; … )                    // variable declaration with no initial value
for ( int i=0; … ; … )                  // variable declaration with initial value
for ( int i=0, j=1; … ; … )             // multiple variables
for ( final Iterator<T> it = …; … ; … ) // final variable

Четвертый случай-это тот, которым вы занимаетесь в данный момент.

В стороне, ForInit также может быть StatementExpressionList, что означает, что вместо объявления и инициализации переменных вы также можете просто выполнить некоторые операторы. E.g, вы могли бы сделать это (но это не особенно полезный пример):

for ( System.out.println( "beginning loop" ; … ; … )

Поделиться Joshua Taylor     08 февраля 2014 в 14:20



1

Изменить как for (int i = 1, k = 2; i<=4000000; i++) {

От Дока

Общая форма утверждения for может быть выражена следующим образом:

for (initialization; termination; increment) {
    statement(s)
}
  • Выражение инициализации инициализирует цикл; он выполняется один раз, как цикл начинается.
  • Когда выражение завершения принимает значение false, цикл прекращает.
  • Выражение инкремента вызывается после каждой итерации через цикл; вполне допустимо, чтобы это выражение увеличивалось или уменьшите значение.

Вы можете инициализировать как int i=1,k=2;

Поделиться Rakesh KR     08 февраля 2014 в 14:21



0

for (int i = 1, k = 2; i<=4000000; i++) {

Поделиться Sabuj Hassan     08 февраля 2014 в 14:20



-1

2 последовательных инициализации должны быть разделены точкой с запятой, как

int a; int b;

В приведенном выше случае вы разделили их с помощью запятой, и поэтому это дает ошибку компиляции.
С уважением.

Поделиться Gautam     28 января 2018 в 10:07



Python: C для цикла с двумя переменными

Я новичок в python. Есть ли аналогичный способ написать этот C для цикла с 2 переменными в python? for (i = 0, j = 20; i != j; i++, j--) { ... }


Инициализация цикла for corrupts вне его области применения

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


Инициализация переменных внутри цикла for

У меня есть цикл for, и я инициализирую переменные внутри этого цикла. После этого мне нужно манипулировать этими переменными, но компилятор говорит, что переменные не инициализируются . public...


OpenMP-Несколько Переменных Цикла

Работают ли циклы OpenMP 'For' с несколькими переменными цикла? Например: int i; double k; #pragma omp parallel for for (k = 0, i = 0; k < 1; k += 0.1, i++) { } Он отлично работает без OpenMP, но...


Инициализация двумерных массивов JPanel с помощью цикла for

Я относительно новичок в java, и я пытаюсь выполнить задание для школы. В моем задании я должен сделать программу GUI, которая делает красную и черную шахматную доску 8 на 8. Единственная проблема...


Для цикла с 2 переменными итератора

Мне нужно перебрать цикл FOR с 2 переменными. Я искал что-то вроде этого: DECLARE counter INT; max INT; ... FOR counter IN REVERSE 1..10, max IN 1..5 LOOP -- some code END LOOP; но не смог найти...


Для цикла с несколькими переменными

Возможно ли для цикла for с 2 переменными остановить инкрементирование только одной переменной при выполнении условия ? Например for(int i = 0, j = 0; i < 5 && j < 10; i++, j++) { cout...


Вычисления внутри цикла for с переменными, отличающимися только последним номером индекса их имени, в R

У меня есть следующий код. Я хочу назначить переменным i1 , i2 , i3 , i4 определенные вычисления , которые необходимо выполнить с переменными m1 , m2 , m3 , m4 . Поэтому вместо того, чтобы делать...


Как утешить 2 PHP 'for' петель?

Возможный Дубликат : Php для цикла с 2 переменными? Есть ли способ сделать его короче: for ($x = 1; $x <= 5; $x++) { for ($y = 1; $y <= 5; $y++) { echo $x, ' ', $y, '<br>'; } } 2 для...


Как написать цикл for с 2 переменными в bash?

Я отсортировал вывод из конфликтующих чисел, которые уже существуют в моем DB с новым запросом вставки в вывод имени файла. Это выходные данные файла. cat output DataBase: (9999999999) NewDB_insert:...


"для цикла" с двумя переменными? (python, for-loop)

Если вам нужен эффект вложенного цикла, используйте:

import itertools
for i, j in itertools.product(range(x), range(y)):
    # Stuff...

Если вы хотите просто выполнить цикл одновременно, используйте:

for i, j in zip(range(x), range(y)):
    # Stuff...

Обратите внимание, что если x и y не имеют одинаковой длины, zip будет усекаться до кратчайшего. Как отметил @abarnert, если вы не хотите усекать до кратчайшего списка, вы можете использовать itertools.zip_longest.

UPDATE

На основе запроса "функция, которая будет читать списки" t1 "и" t2 "и возвращает все идентичные элементы", я не думаю, что OP хочет zip или product. Я думаю, что они хотят set:

def equal_elements(t1, t2):
    return list(set(t1).intersection(set(t2)))
    # You could also do
    # return list(set(t1) & set(t2))

Метод intersection для set вернет все общие для него элементы и другой набор (обратите внимание, что если ваши списки содержат другие list s, вам может потребоваться преобразовать внутренний list в tuples сначала, чтобы они были хешируемыми, в противном случае вызов set завершится ошибкой.). Функция list затем возвращает набор в список.

ОБНОВЛЕНИЕ 2

ИЛИ, OP может хотеть элементы, которые идентичны в одной и той же позиции в списках. В этом случае наиболее подходящим будет zip, а тот факт, что он обрезается до кратчайшего списка, - это то, что вы хотели бы (так как невозможно, чтобы один и тот же элемент был в индексе 9, когда один из списков был всего 5 элементы длинные). Если это то, что вы хотите, перейдите к следующему:

def equal_elements(t1, t2):
    return [x for x, y in zip(t1, t2) if x == y]

Это вернет список, содержащий только те элементы, которые являются одинаковыми и находятся в одной и той же позиции в списках.

"для цикла" с двумя переменными?

Если вы хотите получить эффект вложенного цикла for, используйте:

import itertools
for i, j in itertools.product(range(x), range(y)):
    # Stuff...

Если вы просто хотите сделать цикл одновременно, используйте:

for i, j in zip(range(x), range(y)):
    # Stuff...

Обратите внимание, что если x и y не имеют одинаковой длины, то zip будет усечен до самого короткого списка. Как указал @abarnert, если вы не хотите сокращать список до самого короткого, вы можете использовать itertools.zip_longest .

UPDATE

Основываясь на запросе "функции, которая будет читать списки "t1" и "t2" и возвращать все идентичные элементы", я не думаю, что OP хочет zip или product . Я думаю, что они хотят set :

def equal_elements(t1, t2):
    return list(set(t1).intersection(set(t2)))
    # You could also do
    # return list(set(t1) & set(t2))

Метод intersection a set вернет все элементы, общие для него и другого набора (Обратите внимание, что если ваши списки содержат другие list s, Вы можете сначала преобразовать внутренние list s в tuples , чтобы они были хэшируемыми; в противном случае вызов set завершится неудачей.). Затем функция list превращает набор обратно в список.

UPDATE 2

OR, OP могут потребоваться элементы, которые идентичны в одной и той же позиции в списках . В этом случае наиболее подходящим будет zip , и тот факт, что он усекается до самого короткого списка, - это то, что вам нужно (поскольку невозможно, чтобы один и тот же элемент был в индексе 9, когда один из списков имеет только 5 элементов в длину). Если это то, что вы хотите, идите с этим:

def equal_elements(t1, t2):
    return [x for x, y in zip(t1, t2) if x == y]

Это вернет список, содержащий только те элементы, которые являются одинаковыми и находятся в одной позиции в списках.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *