Java教程

Java学习第二天2021.7.20

本文主要是介绍Java学习第二天2021.7.20,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

今天就是学习的第二天,开始了我们每天的敲代码之旅,不多废话了,下面开始吧。

Java

  • 流程控制语句
    • 顺序流程
    • 条件控制
    • 循环控制
      • while
      • do .... while
      • for
      • 双层循环
    • 分支语句
      • break
      • continue
      • return
  • 练习题
    • 找到偶数
    • 水仙花数
    • 九九乘法表
    • 找到质数

流程控制语句

顺序流程

一个普通的Java程序,例如我们昨天写的hello world,他就是一个顺序结构的流程,从上到下来进行执行的一个程序,这也是没有加别的控制流程语句的默认的执行流程

条件控制

条件控制语句有if then、if then else、if then else if then else。
下面通过代码来进行讲解

class demo1
{
	public static void main(String[] args){
		int a = 3;
		if(a == 3){
			System.out.println("a的值和3相等");
		}
	}
}

在这里插入图片描述

这个代码中if的小括号中的值是Boolean值,如果是true,则进入下面的代码块
下面的代码则是if then else

class demo1
{
	public static void main(String[] args){
		int a = 4;
		if(a == 3){
			System.out.println("a的值和3相等");
		}else{
			System.out.println("a的值和3不相等");
		}
	}
}

在这里插入图片描述
下面的代码将讲述if then else if then else结构,输出中文的时候

class demo2
{
	public static void main(String[] args){
		int a = 60;
		if(a<=100){
			if(a>=80){
				System.out.println("优秀");
			}else if(a>=60){
				System.out.println("良好");
			}else{
				System.out.println("不及格");		
			}
		}
	}
}

在这里插入图片描述
大家可以自己写练习题练习一下if的这种结构,多多练习还是很简单的。

循环控制

循环结构有三种:while(){ }、do{ }while();、for( ; ; ){ } 下面分开介绍这三种循环结构。

while

下面是一段while的代码

class demo3
{
	public static void main(String[] args){
		int i = 0;
		while(i<5){
			System.out.println("hello world");
			i++;
		}
	}
}

在这里插入图片描述
在while的小括号中的值是Boolean类型的值,不仅仅可以写比较的语句

do … while

和while比较相似,使用的过程也比较相似,但是有一点的区别,下面就写一下正常的一个do while循环(和上面的需求相同)

class demo4
{
	public static void main(String[] args){
		int i = 0;
		do{
			System.out.println("hello world");
			i++;
		}while(i<5);
	}
}

在这里插入图片描述
下面的代码显示了while和do while的区别

class demo5
{
	public static void main(String[] args){
		int i = 0;
		do{
			System.out.println("hello world");
			i++;
		}while(i<0);
	}
}

在这里插入图片描述
可以明显看出来,i并不满足while的条件,但是他还是执行了一次,说明do while是先执行一次之后在进行条件的判断,而while则是直接进行条件的判断,如果符合条件再进行执行。不过我觉得do while用起来不是很舒服。

for

下面直接放代码来看for的用处

class demo6
{
	public static void main(String[] args){
		for(int i = 0;i < 5;i++){
			System.out.println("hello world");
		}
	}
}

在这里插入图片描述
在for循环中有三部分,第一部分是变量的定义,第二部分是控制循环的循环次数,值是Boolean类型的,第三部分是自增或者自减,表示变量的变化。在for循环括号中,每一个部分都可以进行省略,但是要有相对应的内容,例如我的代码中int i = 0,这句话可以写在for循环前面。但是如果循环控制没有内容,或者一直是true的话,那就是变成了死循环了。

双层循环

在循环中可以进行嵌套循环,下面通过一个例题的讲解来解释什么是嵌套循环,需求是打印下面的图形:
****
****
****
****

class demo7
{
	public static void main(String[] args){
		for(int i = 0;i<4;i++){
			for(int j = 0;j<4;j++){
				//print方法输出的时候不进行换行
				System.out.print("*");
			}
			//这一行的意思是每次输出完一整行,然后要进行换行
			System.out.println();
		}
	}
}

在这里插入图片描述
嵌套循环按照字面意思理解就是在循环中嵌套循环,也叫做多重循环,这些逻辑可以用画图来解释,或者用整体的思想来进行解释
1.创建一个空白项目并进行测试(不在演示)
2.先用四个语句进行输出一行数据

System.out.print("*");
System.out.print("*");
System.out.print("*");
System.out.print("*");
System.out.println();

3.发现上面的代码有重复代码,然后可以用循环来改进一下

for(int j = 0;j<4;j++){
	System.out.print("*");
}
System.out.println();

4.这样就写完了一行的代码,然后输出四行,代码如下

for(int j = 0;j<4;j++){
	System.out.print("*");
}
System.out.println();
for(int j = 0;j<4;j++){
	System.out.print("*");
}
System.out.println();
for(int j = 0;j<4;j++){
	System.out.print("*");
}
System.out.println();
for(int j = 0;j<4;j++){
	System.out.print("*");
}
System.out.println();

5.发现相同的代码又重复了,把3的代码当成一个整体放进另外一个循环中,让它循环执行里面的循环就行了,这样就出来了最后的代码

class demo7
{
	public static void main(String[] args){
		for(int i = 0;i<4;i++){
			for(int j = 0;j<4;j++){
				//print方法输出的时候不进行换行
				System.out.print("*");
			}
			//这一行的意思是每次输出完一整行,然后要进行换行
			System.out.println();
		}
	}
}

分支语句

分支语句有三个,break,continue,return。他们都有相同的功能,终止功能,但是使用后的结果并不相同,下面分别来介绍三种语句;

break

他的作用是结束循环,代码如下:

class demo8
{
	public static void main(String[] args){
		for(int i = 0;i<10;i++){
			if(i==5){
				break;
			}
			System.out.println(i);
		}
		System.out.println("郑州在下雨");
	}
}

在这里插入图片描述
这里可以看出来break只是终止了他的循环,不影响别的部分,这就是break

continue

不多说了,直接放代码

class demo9
{
	public static void main(String[] args){
		for(int i = 0;i<10;i++){
			if(i==5){
				continue;
			}
			System.out.println(i);
		}
		System.out.println("郑州在下雨");
	}
}

在这里插入图片描述
这就很明显了,continue是跳过这一次的循环

return

直接放代码

class demo10
{
	public static void main(String[] args){
		for(int i = 0;i<10;i++){
			if(i==5){
				return;
			}
			System.out.println(i);
		}
		System.out.println("郑州在下雨");
	}
}

在这里插入图片描述
很明显,使用了return之后直接结束了当前的方法,当前的方法就是main方法,导致了后面的输出郑州在下雨的语句输出不来了。

练习题

找到偶数

需求:找到三位数的所有偶数,要求输出偶数的个数还有他们的总和
分析:
1.先创建空白项目并进行测试
2.分析需求
3.先想办法把三位数全部都找到
4.把每个数字都进行对2求余,如果余数为0则为偶数,如果不为0则是奇数
5.定义两个变量,一个存储数字和,一个存储数字的个数
代码如下

class demo011
{
	public static void main(String[] args){
		//先定义数字的总和sum并且初始化
		int sum = 0;
		//定义数字的个数
		int n = 0;
		//循环找出所有的三位数
		for(int i = 100;i<1000;i++){
			//对于i进行求余,如果余数为0则为偶数
			if(i%2 == 0){
				//如果是偶数,则会进入此代码块,sum+=i是sum = sum + i的另一种写法
				sum+=i;
				//数字的个数也自增
				n++;
			}
		}
		//输出数字的总和
		System.out.println(sum);
		//输出数字的个数
		System.out.println(n);
	}
}

在这里插入图片描述

水仙花数

需求:求出三位数的水仙花数字并且把他们一一输出。(水仙花数是这个数字的各个位数上的数字的立方和等于该数字本身,例如:153=1^3+ 5^3+ 3^3)
分析:
1.先创建空白项目并进行测试
2.需求分析
3.先找出所有的三位数
4.把数字的三个位数上的数字拆开
5.把这三个数字的立方和与原来的数字进行比较
6.如果相同则进行输出
代码如下:

class demo021
{
	public static void main(String[] args){
		//这个用来存放个位数的数值
		int g = 0;
		//这个用来存放十位数的数值
		int s = 0;
		//这个用来存放百位数的数值
		int b = 0;
		//这个用来存放上面三个数字的立方和
		int sum = 0;
		//循环遍历所有的三位数字
		for(int i = 100;i<1000;i++){
			//提出来百位的数值
			b = i / 100;
			//提出来十位的数值
			s = (i - b * 100)/10;
			//提出来个位的数值
			g = i - b * 100 - s * 10;
			//算出来三个数字的立方和
			sum = b*b*b + s*s*s + g*g*g;
			//把sum和该数字进行比较
			if(i==sum){
				//相同则进行输出
				System.out.println(i);
			}
		}
	}
}

在这里插入图片描述

九九乘法表

需求分析:打印出来九九乘法表
分析:
1.先创建一个空白项目并测试
2.分析这个需要嵌套循环来实现
3.外层的是右边的数字,内层循环是左边的数字
4.左边的数字需要小于等于右边的数字
代码如下:

class demo041
{
	public static void main(String[] args){
		//这个是外层循环,控制右边的数字
		for(int i = 1;i<10;i++){
			//这个是内层循环,控制的左边的数字
			for(int j = 1;j<=i;j++){
				//输出一个式子,不换行的
				System.out.print(j+"*"+i+"="+j*i+" ");
			}
			//一行输出完了之后在进行换行
			System.out.println();
		}
	}
}

在这里插入图片描述

找到质数

需求:找到100以内的所有质数
分析:
1.创建一个空白项目并进行测试
2.先遍历出2-100的所有数字
3.分析一下
4.质数的定义是要除了1和它本身都不能除尽,意思就是求余的结果不为0
5.可以定义一个开关来表示输出这个数字
6.在循环中写一个条件语句,如果求余结果为0,则开关变为false
代码如下:

class demo031
{
	public static void main(String[] args){
		//遍历2-100的数字
		for(int i = 2;i<100;i++){
			//定义一个锁,开始为true
			int jishu = true;
			//遍历2-i的数字来让i求余
			for(int j = 2;j<i;j++){
				//如果i%j为0,则表示i不是质数
				if(i%j==0){
					//锁变为false
					jishu = false;
				}
			}
			//如果jishu为true,则表示除了1和它本身没有能除尽的,为质数
			if(jishu){
				//输出这个质数
				System.out.println(i);
			}
		}
	}
}

在这里插入图片描述
这里写我的另外一种写这个题目的思路,用集合来写的,初学者可能看不懂,不过我感觉我的这种想法可以节省一点空间
代码如下:

import java.util.ArrayList;
class demo08
{
	public static void main(String[] args){
		ArrayList<Integer> arr = new ArrayList();
		arr.add(2);
		for(int i = 2;i<101;i++){
			boolean suo = true;
			for(int j = 0;j<arr.size();j++){
				if(i % arr.get(j)==0){
					suo = false;
					break;
				}
			}
			if(suo){
				arr.add(i);
			}
		}
		for(int i = 0;i<arr.size();i++){
			System.out.println(arr.get(i));
		}
	}
}

在这里插入图片描述
这个用了ArrayList集合,只存储质数,先存储一个2,然后把2-100的数字以此执行下面的程序,对于ArrayList内的所有元素进行求余,如果有能除尽的,则锁为false,如果没有能除尽的则为质数,锁为true。并且把这个新质数加到ArrayList中。这样的话只用求余一下比这个数小的质数了,会稍微节省一点内存把,如果数字大了可能会加快一点速度。

这篇关于Java学习第二天2021.7.20的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!