本篇文章为转载。
一、循环语句
循环共有三种语句形式,接下来我会解释下的三种循环语句的使用方法。
二、循环语句例题
1.三种循环
1.for循环
代码如下(示例):
for循环的格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程:
A:首先执行初始化语句
B:其次执行判断条件语句,看其返回值
如果是true,就继续
如果是false,循环结束
C:执行循环体语句
D:执行控制条件语句
E:回到B
*/
class ForDemo2 {
public static void main(String[] args) {
//在控制台输出10次HelloWorld
for(int x=0; x<10; x++) {
System.out.println("HelloWorld");
}
System.out.println("--------------");
//初始化不从0开始
for(int x=1; x<=10; x++) {
System.out.println("HelloWorld");
}
for(int x=1; x<11; x++) {
System.out.println("HelloWorld");
}
for(int x=10; x>0; x--) {
System.out.println("HelloWorld");
}
}
}
/*
需求:求5的阶乘
阶乘:
n! = n*(n-1)*(n-2)*...*3*2*1
n! = n*(n-1)!
*/
public static void main(String[] args) {
//定义累乘变量
int jc = 1;
for(int x=1; x<=5; x++) {
jc *= x;
}
System.out.println("5的阶乘是:"+jc);
}
}
/*
需求:统计”水仙花数”共有多少个
分析:
A:我们要统计有多少个满足条件的数据,就要定义一个统计变量
int count = 0;
B:一个三位数其实告诉我们的是范围,通过for循环就可以搞定。
C:其各位数字的立方和等于该数本身就是规则
我们如何取得每一个位上的数据呢?
给了任意的一个数据x 153
个位:x%10
十位:x/10%10
百位:x/10/10%10
千位:x/10/10/10%10
...
x == (个位*个位*个位 + 十位*十位*十位 + 百位*百位*百位)
*/
class ForDemo4 {
public static void main(String[] args) {
//定义统计变量
int count = 0;
for(int x=100; x<1000; x++) {
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
if(x == (ge*ge*ge + shi*shi*shi + bai*bai*bai)) {
count++;
}
}
System.out.println("水仙花数共有:"+count+"个");
}
}
/*
需求:求出1-10之间数据之和
0+1=1
1+2=3
3+3=6
6+4=10
10+5=15
...
因为每一次的累加结果都是变化的,所以要定义一个变量,专门用于记录每次累加的结果。
由于我们需要的1,2,3,4...也是变化的,所以我们也要定义一个变量,而这个变量用循环就能得到每个值。
*/
class ForTest2 {
public static void main(String[] args) {
//最好想
//System.out.println(1+2+3+4+5+6+7+8+9+10);
//跟循环结合起来
int sum = 0;
for(int x=1; x<=10; x++) {
//x=1,2,3,4,...10
//sum = sum + x; //sum=0 + 1 = 1;
//sum = sum + x; //sum=1 + 2 = 3;
//sum = sum + x;
sum += x;
}
System.out.println("1-10的和是:"+sum);
}
2.while循环
代码如下(示例):
/*
while循环的格式:
while(条件表达式) {
语句体;
}
变形格式:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
由此可见while循环和for循环是可以等价转换的。
*/
class WhileDemo {
public static void main(String[] args) {
//for
/*
for(int x=0; x<10; x++) {
System.out.println("HelloWorld");
}
System.out.println("--------------");
*/
//while
/*
int x=0;
while(x<10) {
System.out.println("HelloWorld");
x++;
}
*/
//求和
//for
/*
int sum = 0;
for(int x=1; x<=100; x++) {
sum+=x;
}
System.out.println("1-100之和是:"+sum);
*/
//while
/*
int sum = 0;
int x = 1;
while(x<=100) {
sum += x;
x++;
}
System.out.println("1-100之和是:"+sum);
*/
//水仙花
//for
/*
for(int x=100; x<1000; x++) {
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
if(x == (ge*ge*ge + shi*shi*shi + bai*bai*bai)) {
System.out.println(x);
}
}
*/
//while
int x = 100;
while(x<1000) {
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
if(x == (ge*ge*ge + shi*shi*shi + bai*bai*bai)) {
System.out.println(x);
}
x++;
}
}
}
/*
for和while的区别:
使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,
而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。
原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
场景区别:
for循环适合针对一个范围判断进行操作
水仙花
while循环适合判断次数不明确操作
吃葡萄
3.do while循环
/*
do...while格式:
do {
语句体;
}while(条件表达式);
变形格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
*/
class DoWhileDemo {
public static void main(String[] args) {
/*
int sum = 0;
for(int x=1; x<=100; x++) {
sum+=x;
}
System.out.println(sum);
*/
//do...while
int sum = 0;
int x = 1;
do{
sum+=x;
x++;
}while (x<=100);
System.out.println(sum);
}
}
2.三种循环的区别
三种循环的区别:
A:do…while循环至少会执行一次循环体。
B:for循环和while循环只有在条件成立的时候才会去执行循环体。
注意事项:
A:写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环。
B:最简单的死循环代码
for(;;){}
三、数组
1.一维数组
数组:存储同一种数据类型的多个元素的集合。(也可以称为容器)
数组的定义格式:
格式1:数据类型[] 数组名;
int[] arr;
格式2:数据类型 数组名[];
int arr[];
推荐方式1。
现在的数组没有元素,使用是没有意义的。
接下来,我们要对数组进行初始化。
那么,我们如何对数组进行初始化呢?
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:
数据类型[] 数组名 = new 数据类型[数组长度];
class ArrayDemo {
public static void main(String[] args) {
//按照动态初始化数组的格式,我们来定义一个存储3个int类型元素的数组
int[] arr = new int[3];
/*
左边:
int:说明数组中的元素的数据类型。
[]:说明这是一个数组
arr:数组的名称
右边:
new:为实体(对象)开辟内存空间
Scanner sc = new Scanner(System.in);
int:说明数组中的元素的数据类型。
[]:说明这是一个数组
3:说明的是数组中的元素个数
*/
//我们如何获取里面的值呢?
//数组名称
System.out.println(arr); //[I@778b3fee 地址值
//如何获取元素值呢?
//数组为每个元素分配了一个编号,这个编号的专业叫法:索引。
//而且是从0开始编号的。也就是说数组的最大编号是长度-1。
//有了编号以后,我们就可以通过数组名和编号的配合取得数组元素
//格式:数组名[编号];
System.out.println(arr[0]); //0
System.out.println(arr[1]); //0
System.out.println(arr[2]); //0
}
}
/*
定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素。
*/
class ArrayDemo2 {
public static void main(String[] args) {
//定义数组
int[] arr = new int[3];
//输出数组名称及元素
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//给数组中的元素赋值
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
//再次输出数组名称及元素
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
/*
数组获取最值(获取数组中的最大值最小值)
自学:最小值。
*/
class ArrayTest2 {
public static void main(String[] args) {
//定义数组
int[] arr = {12,86,79,43,50};
//如何找呢?
/*
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
System.out.println(max);
*/
//为了将来调用方便,我们写一个功能实现获取最值
int max = getMax(arr);
System.out.println("最大值是:"+max);
}
/*
返回值类型:int
参数列表:int[] arr
*/
public static int getMax(int[] arr) {
//定义参照物
int max = arr[0];
//循环遍历从1开始元素
for(int x=1; x<arr.length; x++) {
//比较,把大的留下来
if(arr[x] > max) {
max = arr[x];
}
}
//返回最大值
return max;
}
}
/*
写功能实现:
返回值类型:void
参数列表:int[]
*/
public static void reverse(int[] arr) {
for(int start=0,end=arr.length-1; start<=end; start++,end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
}
/*
数组查表法(根据键盘录入索引,查找对应星期)
*/
import java.util.Scanner;
class ArrayTest4 {
public static void main(String[] args) {
//1,2,3,4,5,6,7
//定义一个数组
String[] strArray = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字(1~7):");
int week = sc.nextInt();
//如何得到数据呢?
System.out.println("你想得到的是:"+strArray[week]);
}
}