说完了判断,那岂能不说循环?循环这个东西可是计算机学习内容里面和判断一样是最基础的内容!学好了事半功倍,学不好事倍功半!
目录
一、while循环
1.语法与举例
2.应用
3.应用案例
二、for循环
1.语法与举例
2.应用
3.应用案例
三、do循环
1.语法与举例
2.应用
四、浅谈break与continue
特别的语法&举例
五、嵌套循环
六、常见的循环算法与应用
1.求和与平均值
2.匹配计数
3.寻找第一个计数
4.提示用户输入,直到合规
5.最值
上一章节的链接:JAVA学习笔记(五)判断
一、while循环 1.语法与举例// 语法
while (循环条件){
循环体语句;
迭代语句;
}
// 案例
int i = 0;
while (i < 3){
System.out.println(i);
// 这个就是循环体语句
i++;
// 这个就是迭代语句
}
注意啊,千万小心死循环的出现!这是一个逻辑问题,注意思维的严谨性!
2.应用为什么我们会需要应用while语句呢?很简单,当我们知道循环最终的目的,却不知道要循环多少次的时候,就需要用到了(当然了,如果既知道要循环多少次有知道最终的目的,那就看你个人喜好是用while还是for循环了)。比如我们想知道经过多少年之后我们的存款会翻倍?这就只能用while循环了。
3.应用案例问题:在一个银行里面存10000元,每年的利息是5%。多少年以后存款翻倍?
代码:
(1)先写个一个处理此类存款问题的类,可以修改参数来普适这一类的问题。
/**
A class to monitor the growth of an investment that
accumulates interest at a fixed annual rate.
*/
public class Investment
{
private double balance;
private double rate;
private int year;
/**
Constructs an Investment object from a starting balance and
interest rate.
@param aBalance the starting balance
@param aRate the interest rate in percent
*/
public Investment(double aBalance, double aRate)
{
balance = aBalance;
rate = aRate;
year = 0;
}
/**
Keeps accumulating interest until a target balance has
been reached.
@param targetBalance the desired balance
*/
public void waitForBalance(double targetBalance)
{
while (balance < targetBalance)
{
year++;
double interest = balance * rate / 100;
balance = balance + interest;
}
}
/**
Gets the current investment balance.
@return the current balance
*/
public double getBalance()
{
return balance;
}
/**
Gets the number of years this investment has accumulated
interest.
@return the number of years since the start of the investment
*/
public int getYears()
{
return year;
}
}
(2)然后写一个主类来调用这个类
/**
This program computes how long it takes for an investment
to double.
*/
public class InvestmentRunner
{
public static void main(String[] args)
{
final double INITIAL_BALANCE = 10000;
final double RATE = 5;
Investment invest = new Investment(INITIAL_BALANCE, RATE);
invest.waitForBalance(2 * INITIAL_BALANCE);
int years = invest.getYears();
System.out.println("The investment doubled after "
+ years + " years");
}
}
//运行结果是
The investment doubled after 15 years
二、for循环
1.语法与举例
// 语法
for (初始化语句;循环条件;迭代语句){
循环体语句;
}
// 实例
for (int i = 0;i < 3;i++){
System.out.println(i);
}
2.应用
当我们知道要循环的次数,而不知道最终结果的常常要使用for循环。最为常见的案例就是一个列表的遍历:一般是知道一个列表的长度,然后要是想要求解这个列表里面的某个最具特征或符合我们要求的元素,那么for循环就很好用了(比如求最值,当然了,while循环也可以完成这样的 *** 作)
3.应用案例比如说,这里有一个问题是:读取12个月份的温度值,然后求取最高温度所在的月份(建议大家思考一下,很简单)
import java.util.Scanner;
public class E_Five {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double high_tem = 0;
int year = 1;
for (int i = 0; i < 12; i++) {
Double tem = in.nextDouble();
if (tem > high_tem) {
high_tem = tem;
year = i + 1;
}
}
in.close();
System.out.println("最高温度月份是:" + year);
}
}
运行结果如下:
10.3
12.6
16.8
20.6
27.5
29.7
33.2
34.3
31.5
28.4
18.1
15.9
最高温度月份是:8
三、do循环
若你希望一个循环体至少执行一次,且在执行循环体的代码段之后完成循环测试,那么就使用do循环吧!
1.语法与举例// 语法
do
{
循环体代码段;
}
while (条件);
// 举例
int value;
do
{
System.out.print("Enter an integer < 100:");
value = in.nextInt();
}
while (value >= 100);
// 这个例子的意思是:你要用户输入一个小于100的整数,
// 如果用户输错了,就让他一直输入,直到输对
2.应用
本来我想了想,一时间没有什么觉得特别可用之处。不过书上的章节确实很给人启发:可以用来处理卫哨值。完全可以把终止条件作为while的内容!
四、浅谈break与continue简而言之,break是跳出所有的循环,而continue是跳出部分循环,一般有计算机基础的都很熟悉这个老朋友了。
为了一些可能第一次接触编程的同学了解,我举个例子来助于理解:我们登记每天的气温,要按照月份和日期登记,用到一个循环里面加一个循环,外面的大循环是1到12月,里面小循环是1到31号。但是很显然每个月不是都有31天那么,我们就可以用continue跳出月份这个小循环,到下一个月份。但是一年也只有12个月,登记完12月31日的气温以后就要结束了,这一年的大循环跳出或者说结束就靠break。
之所以要浅谈也不单单是为了萌新熟悉这两个卧龙凤雏,实际上java里面,break语句还有一种形式:可以用“break label”来退出嵌套循环语句——会直接跳至有这个标签(label)的语句末尾!
特别的语法&举例// 语法
label:
语句
// 泛泛地举例
outerloop:
while (外循环条件)
{
while (内循环条件)
{
if (不好的情况)
{
break outerloop;
}
}
}
五、嵌套循环
之前的判断章节中已经见识过嵌套两个if语句,类似的,复杂的迭代也是需要嵌套的。如果说,处理表格,这就会自动展现出了外循环处理所有行、内循环处理当前行中列的易于理解的逻辑。
这里也不会给大家特别介绍嵌套循环的代码或者案例,因为实际的运用非常常见;前几个小部分的代码中就有相关涉及,所以不再提及。
六、常见的循环算法与应用 1.求和与平均值// 求和
double total = 0;
while (in.hasNextDouble())
{
double input = in.nextDouble();
total = total + input;
}
// 平均值
double total = 0;
int count = 0;
while (in.hasNextDouble())
{
double input = in.nextDouble();
total = total + input;
count++;
}
double average = 0;
if (count >0)
{
average = total / count;
}
2.匹配计数
这是什么问题呢?这个就是说,要统计或者匹配什么满足特殊要求的元素,就会用到这种思路类型。这里我们举一个统计字符串里面有多少空格子的代码
int spaces = 0;
for (int i = 0;i < str.length();i++)
{
char ch = str.charAt(i);
if (ch == ' ')
{
space++;
}
}
3.寻找第一个计数
// 这样的 *** 作可以找到第一个匹配内容
boolean found = false;
char ch = '?';
int position = 0;
while (!found && position < str.length())
{
ch = str.charAt(position);
if (ch == ' ') { found = true;}
else {position++;}
}
4.提示用户输入,直到合规
boolean valid = false;
double input = 0;
while (!valid)
{
System.out.print("Please enter a positive value < 100:");
input = in.nextDouble();
if (0 < input && input <100) { valid = true;}
else { System.out.println("Invalid input.");}
}
5.最值
这个就不是很想再敲一遍代码了,之前的for循环部分是有写过的。可以看出来,最值就是要遍历,然后其中要不断比较。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)