Синтаксис Java | Структура цикла

Java
Синтаксис Java | Структура цикла

предисловие

С:существует«Грамматика Java | Операторы управления и блок-схемы»В этой главе г-н Чжа представил три вида управляющих операторов, каждый из которых имеет ряд проблем, которые он может решить. Например, операторы последовательного управления могут решить шаг «потока», а операторы управления выбором могут решить проблему условного суждения.

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

whiletrue

что такое цикл

Жизнь

цикл: английский [circulate;circle]

  • бег по петле, петле или орбите;
  • бег по зигзагообразному маршруту;
  • В частности, это касается бега в течение недели, а затем возвращения на исходное место, а затем повторного поворота.
  • Или делать что-то снова и снова подряд.

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

clip_image002-1591089763069

В повседневной речи последних двух лет есть даже стебель: «Сущность человека — репетитор».

人类的本质

компьютер

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

Во многих практических задачах есть много регулярно повторяющихся операций, поэтому некоторые операторы необходимо повторять в программе. Структура цикла — это структура потока, которая многократно выполняет определенную программу при определенных условиях, а программа, которая многократно выполняется, называется телом цикла (операцией цикла). [1]

Требования к делу: Xiong Da не достиг своей цели в тесте Java. Чтобы показать свою решимость усердно учиться, он решил сто раз написать: «Учись усердно и делай успехи каждый день!»

Такой мотивированный ученик действительно нравится учителю! Итак, как использовать Java-код для достижения результата в 100 раз больше, чем «усердно учиться, улучшаться каждый день»?

clip_image002

Вроде ничего страшного в этом нет, если освоить Ctrl+C и Ctrl+V, становится легче. Но что, если сейчас этот целеустремленный студент решит написать 10 000 раз? Даже с CV Дафа количество работы над кодом пугает человека!

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

пока цикл

Цикл while является классическим синтаксисом структуры цикла не только в языке Java, но и в других языках программирования, имеющих схожие концепции и синтаксис.

image-20210110120644904

грамматика

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

  • условие цикла
  • тело петли
while (循环条件) {
    循环体/循环操作
}

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

image-20210108103921630

использовать

Далее мы будем использовать случай, чтобы понять шаги использования.

Случай Требование 1: Решите задачу о большом медведе выше.

Анализ мыслей:

  1. Этот случай представляет собой требование повторяющегося шага, которое решается оператором управления циклом.

  2. Чтобы применить цикл while, вам нужно сначала определить два фиксированных компонента цикла в этом случае.

    1. Состояние цикла:<= 100
    2. Работа цикла: вывод «Учись усердно, совершенствуйся каждый день»
  3. Напишите код, используя синтаксис цикла while

    Облегченный синтаксис учитывает только условия цикла и циклические операции. Однако для того, чтобы при написании кода учащиеся могли сформировать полное пошаговое представление, г-н Ча расширил шаги грамматики до 4 частей, чтобы при решении задач с циклами можно было непосредственно думать о составе кода. 4 части.

    Учитель Ча сказал:Два дополнительных компонента фактически используются для дополнения использования условий цикла.

    1. Инициализировать переменную цикла: подготовить начальную переменную для условного выражения цикла.
    2. условие цикла
    3. Циклическая операция
    4. Выход из цикла: измените переменные в условном выражении цикла, чтобы цикл мог завершиться в указанное время.
  4. Проверьте, нормально ли это, и выйдите из цикла после завершения бизнеса.

Код:

// 1.初始化 循环变量
int i = 1;

// 2.循环条件
while (i <= 100) {
    // 3.循环操作
    System.out.println("第" + i + "遍:好好学习,天天向上!");
    // 4.循环出口
    // 借助变量 i 来作循环条件,如果 i 的值不变动,会出现死循环
    i += 1;
}

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

Требование к случаю 2: Реализуйте печать 50 тестовых листов.

Анализ мыслей:

  1. Этот случай представляет собой требование повторяющегося шага, которое решается оператором управления циклом.
  2. Чтобы применить цикл while, вам нужно сначала определить два фиксированных компонента цикла в этом случае.
    1. Состояние цикла:<= 50
    2. Циклическая операция: печать тестовых бумаг
  3. Напишите код, используя синтаксис цикла while
  4. Проверьте, нормально ли это, и выйдите из цикла после завершения бизнеса.

Код:

// 1.初始化 循环变量
int i = 1;

// 2.循环条件
while (i <= 50) {
    // 3.循环操作
    System.out.println("正在打印第" + i + "份试卷");
    // 4.循环出口
    i += 1;
}

цикл do-while

Требования к кейсу: Учитель каждый день проверяет, квалифицированы ли учебные задания Сюн Эра, и если нет, то продолжает. Ежедневные учебные задачи, поставленные учителем для Сюн Эра: чтение учебников утром, изучение теоретической части, программирование на компьютере во второй половине дня и освоение части кода.

Это требование, на первый взгляд, может быть определено как решаемое циклом, в котором есть два элемента цикла:

  • Условие цикла: Проверить Неудачно Продолжить

  • Циклическая работа: учебные задачи (чтение учебников утром, изучение теоретической части, программирование на компьютере днем, освоение части кода)

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

  • Логическая последовательность: Ее логика заключается в том, что учебная задача (операция цикла) выполняется сначала, а затем проверяется учителем (условие цикла).
  • Условия сложные: его условие уже не в нормальное количество раз увеличивать, а судить о том, квалифицирован он или нет.

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

грамматика

do {
    循环体/循环操作
} while (循环条件);

Из блок-схемы мы видим, что:do-whileВыполнение цикла сначала обращает внимание на do (операцию цикла), а затем выполняется условие цикла. а такжеОн выполнит операцию цикла хотя бы один раз, независимо от того, истинно условие или нет..

image-20210110120402723

использовать

давайте использоватьdo-whileРешите задачу Сюн Эр.

Scanner input = new Scanner(System.in);

// 1.初始化循环变量
String result;
// 套用do-while语句
do {
    // 2.循环操作
    System.out.println("熊二上午阅读教材,学习理论部分。");
    System.out.println("熊二下午上机编程,掌握代码部分。");
    // 3.循环出口
    System.out.print("老师检查是否合格(y/n):");
    result = input.next();
} while ("n".equals(result)); // 4.循环条件

System.out.println("今日学习圆满!");

для петли

Изучив синтаксис цикла цикла while, учитель покажет вам синтаксис последнего цикла: цикл for.

Почему?

Цикл for — это синтаксис цикла, который мы часто используем в более поздний период!Должна быть причина, по которой он используется так часто. Взгляните на «Вывод 100 раз, усердно учитесь» ниже для сравнения!

// =============while循环=============
// 1.初始化 循环变量
int i = 1;

// 2.循环条件
while (i <= 100) {
    // 3.循环操作
    System.out.println("第" + i + "遍:好好学习,天天向上!");
    // 4.循环出口
    // 借助变量 i 来作循环条件,如果 i 的值不变动,会出现死循环
    i += 1;
}
// =============for循环=============
for (int i = 1; i <= 100; i += 1) {
    System.out.println("第" + i + "遍:好好学习,天天向上!");
}

Очевидно,Циклы for более лаконичны, чем циклы while, когда количество циклов фиксировано..

грамматика

Синтаксис цикла for более лаконичен и гибок, но четыре элемента цикла, описанные выше, остаются неизменными. Просто это требует от нас указать несколько компонентов, которые часто забываются в цикле, чтобы мы могли больше сосредоточиться на работе цикла. Таким образом, вы можете думать о цикле for как о расширении цикла while. (Например, множественное, если расширено, чтобы переключить конструкцию выбора)

Учитель Ча сказал:Лично для г-на Ча, если и for, и while могут решить проблему, я предпочитаю использовать for. Потому что при использовании цикла while и написании кода сверху вниз часто забывают о выходе из цикла.

for (初始化 循环变量; 循环条件; 循环出口) {
    循环体/循环操作
}

использовать

Требование к случаю 1: Введите оценки 5 курсов на выпускном экзамене учащегося в цикле и рассчитайте средний балл.

image-20210110124728589

Анализ мыслей:

Средний балл: общий балл / количество

  1. Этот случай представляет собой требование повторяющегося шага, которое решается оператором управления циклом.

  2. Определите два фиксированных компонента цикла в этом случае.

    1. Состояние цикла:<= 5
    2. Операция на велосипеде: введите каждый класс класса и добавьте (+ =)
  3. Поскольку это фиксированное количество циклов, примените синтаксис цикла for для написания кода.

    1. Инициализировать переменную цикла: подготовить начальную переменную для условного выражения цикла.
    2. условие цикла
    3. Циклическая операция
    4. Выход из цикла: измените переменные в условном выражении цикла, чтобы цикл мог завершиться в указанное время.
  4. Проверьте, нормально ли это, и выйдите из цикла после завершения бизнеса.

Код:

Scanner input = new Scanner(System.in);

System.out.print("请输入学生姓名:");
String name = input.next();

// 定义变量存储成绩和
double sum = 0;

// 输入每门课成绩
for (int i = 1; i <= 5; i++) {
    System.out.print("请输入第" + i + "门课的成绩:");
    double score = input.nextDouble();
    // 累加成绩和
    sum += score;
}

// 计算平均分,平均分 = 成绩和 / 课数量
double avg = sum / 5;
System.out.println(name + "的平均分为:" + avg);

Требование к случаю 2: Выведите таблицу сложения, как показано на рисунке.

image-20210110125232602

Анализ мыслей:

  1. Этот случай представляет собой требование повторяющегося шага, которое решается оператором управления циклом.

  2. Определите два фиксированных компонента цикла в этом случае.

    1. Состояние цикла:<= 输入的值

    2. Циклическая операция: для вывода операции сложения

      два операнда операции сложения

      • Первый операнд: Увеличение от 0 до введенного вами значения
      • Второй операнд: уменьшить введенное значение до 0
  3. Поскольку это фиксированное количество циклов, примените синтаксис цикла for для написания кода.

    1. Инициализировать переменную цикла: подготовить начальную переменную для условного выражения цикла.
    2. условие цикла
    3. Циклическая операция
    4. Выход из цикла: измените переменные в условном выражении цикла, чтобы цикл мог завершиться в указанное время.
  4. Проверьте, нормально ли это, и выйдите из цикла после завершения бизнеса.

Код:

Scanner input = new Scanner(System.in);

System.out.print("请输入一个值:");
int num = input.nextInt();

System.out.println("根据这个值可以输出以下加法表:");
// 套用 for 语法
// 注意:int i = 0, j = num; 这也是变量定义的方式,但不常用
for (int i = 0, j = num; i <= num; i++, j--) {
    System.out.println(i + " + " + j + " = " + (i + j));
}

или:

Scanner input = new Scanner(System.in);

System.out.print("请输入一个值:");
int num = input.nextInt();

System.out.println("根据这个值可以输出以下加法表:");
// 套用 for 语法
// 定义两个计算变量
int i = 0;
int j = num;
for (; i <= num;) {
    System.out.println(i + " + " + j + " = " + (i + j));
    // 循环出口
    i++;
    j--;
}

Меры предосторожности

  • Все три элемента цикла for можно опустить, но два;Нет. нельзя спасти! После исключения трех основных элементов получается бесконечный цикл.
  • Переменные инициализации и выходы из цикла в цикле for можно вынести отдельно, например, чтобы увеличить область действия переменной.
  • Цикл for можно использовать только в сценариях с фиксированным количеством циклов.

Разница между тремя циклами

Разница в порядке выполнения:

  • цикл while: сначала оцените, а затем выполните
  • цикл do-while: сначала выполнить, а затем судить. do-while также выполняется по крайней мере один раз, когда начальный случай не удовлетворяет условию цикла.
  • цикл for: сначала оцените, а затем выполните

Различия в применимых ситуациях:

  • Когда количество циклов фиксировано, обычно используется цикл for.
  • Когда количество циклов неизвестно, обычно используют цикл while или do-while.

бесконечная петля

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

Ниже приведены три простейших вида кода бесконечного цикла, но пока условие цикла или выход из цикла неверны или отсутствуют, это фактически приведет к бесконечному циклу.

while (true) {
	
}
do {

} while (true);
for (;;) {

}

Само собой разумеется, что бесконечный цикл — это плохая ситуация, но это точно так же, как: «На практике нет правильного или неправильного, это в основном зависит от пользователя». .

Например: когда выНе знаю, когда цикл закончится, было бы правильнее использовать бесконечный цикл. Но обычно его следует использовать с оператором перехода.

оператор перехода

break

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

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

breakКлючевое слово, которое мы видели в операторе switch, означает прерывание. Его также можно использовать в трехпетлевых структурах, и в этом случае это означаетЗавершить текущий процесс цикла и перейти к следующему оператору вне блока цикла..

// 伪代码:4000米长跑
for (int i = 0; i < 10; i++) {
    if (体力不支) {
        // 退出比赛
        break;
    }
}

Требования к делу: введите оценки учащегося за 5 курсов в цикле и рассчитайте средний балл.Если определенный балл отрицательный, остановите ввод и сообщите об ошибке ввода.

image-20210110140910220

Это требование реализовано в цикле for только что с несколькими дополнительными требованиями.

Scanner input = new Scanner(System.in);

System.out.print("请输入学生姓名:");
String name = input.next();

double sum = 0;

// 提升作用域
// 如果 i 定义在for循环块中,那它就只能在for循环块中使用。
int i = 1;
for (; i <= 5; i++) {
    System.out.print("请输入第" + i + "门课的成绩:");
    double score = input.nextDouble();
    // 如果输入了负数,提示错误并结束循环
    if (score < 0) {
        System.out.println("分数录入错误!请重新开始录入!");
        break;
    }
    sum += score;
}

// 提前结束循环则不需要进行平均分计算
if (i > 5) {
    double avg = sum / 5;
    System.out.println(name + "的平均分为:" + avg);
}

continue

КромеbreakКроме того, есть оператор перехода:continue. Как следует из названия, то, что он делает,Пропустить оставшиеся невыполненные операторы в этом теле цикла и немедленно выполнить следующее определение условия цикла, что можно понимать только как завершение этого цикла..

Требования к случаю: используйте цикл + продолжить реализацию, зациклируйте оценки учащегося в классе Java и подсчитайте долю учащихся, чьи баллы больше или равны 80.

image-20210110142400211

Scanner input = new Scanner(System.in);

System.out.print("请输入班级总人数:");
int num = input.nextInt();

// 设 >= 80分的学生人数
int count = 0;
for (int i = 1; i <= num; i++) {
    System.out.print("请输入第" + i + "位学生的成绩:");
    double score = input.nextDouble();
    // 统计成绩 >= 80分以上的学生人数
    if (score < 80) {
        // 结束本次循环,进入下一次循环
        continue;
    }
    // 累加人数
    count ++;
}

// 计算
double percent = count * 1.0 / num * 100; 
System.out.println("80分以上的学生人数为:" + count);
System.out.println("80分以上的学生所占的比例为:" + percent + "%");

Учитель Ча сказал:В этом случае продолжать не нужно, мы также можем заменить код счетной части на:

if (score > 80) {
    count ++;
}

бесконечный цикл + оператор перехода

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

  • Использование бесконечного цикла может привести к бесконечному выполнению программы.
  • Использование break для завершения цикла
  • Использование continue может завершить этот цикл и перейти к следующему циклу.

image-20210110143035620

Scanner input = new Scanner(System.in);

while (true) {
    System.out.print("请输入用户名:");
    String username = input.next();
    System.out.print("请输入用户密码:");
    String password = input.next();
    // 失败重输
    if (!("admin".equals(username) 
            && "abcd123".equals(password))) {
        System.out.println("登录失败!请重新输入!");
        // 结束本次循环,进入下次循环
        continue;
    }
    // 结束死循环
    break;
}

System.out.println("登录成功!");

Учитель Ча сказал:Чувствуете ли вы себя немного сожженным мозгом? Просто напишите еще несколько раз! Это также может быть записано, как показано ниже.

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

Scanner input = new Scanner(System.in);

boolean flag;
do {
    // 初始化 循环变量
    // 初始为true,只有当登录成功才将flag状态改为false以结束循环
    flag = true;

    System.out.print("请输入用户名:");
    String username = input.next();
    System.out.print("请输入用户密码:");
    String password = input.next();
    // 失败重输
    if ("admin".equals(username) 
        && "abcd123".equals(password)) {
        System.out.println("登录成功!");
        // 更改循环状态
        flag = false;
    } else {
        System.out.println("登录失败!请重新输入!");
    }
} while (flag);

использованная литература

[1] Чжан Гуйчжу, Чжан Пин, Чен Айгуо. Объектно-ориентированное программирование на Java (jdk1.6), третье издание: Пекинский университет почты и телекоммуникаций, 2005 г.

постскриптум

Что ж, это конец введения структуры цикла.В качестве домашнего задания по этой статье обратите внимание на поиск WeChat:Раздаточный материал учителя ча, то ответьРабота по циклической структуреВот и все.

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

Кроме того, в этой статье Учитель Ча приводит одни и те же потребности и неоднократно дает разные решения, что будет немного неудобно для студентов, которые учатся впервые и «стереотипированы», потому что они не знают, какое из них выбрать.

Но на самом деле жизнь никогда не бывает «стереотипным» шагом, и проблемы, возникающие в жизни, не всегда «стереотипно» решаются, и процедура тоже одна и та же.

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

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

Таким образом, в статье г-на Ча ранняя стадия представляет собой в основном небольшой белый текст, и лишь небольшое количество исследований исходного кода перемежается. Конечно, когда Xiaobaiwen обновляется больше, она вам все равно нравится, а исходный код некоторых технологий будет время от времени анализироваться на более позднем этапе.