《菜鸟记基础篇3.1》——循环,一维数组

本篇文章为转载。


一、循环语句

循环共有三种语句形式,接下来我会解释下的三种循环语句的使用方法。

二、循环语句例题

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]);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值