晨考
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 9:17
* @Version 1.0
*/
public class ZuoYe01 {
public static void main(String[] args) {
/*byte a = 1; // byte 可以
long b = 1l; // long类型 jdk1.8 不行
String c = "hello" ; // jdk1.8 之后都支持*/
/*char d = 'A';
// switch 也支持枚举类型
switch (d){
default:
System.out.println("我是默认语句");
case 5 :
System.out.println("可以吗,输出该语句就可以");
}*/
int x=0,y=1;
if(++x==y--&x++==1||--y==0)
System.out.println("x="+x+",y="+y);
else
System.out.println("y="+y+",x="+x);
int a=3,b=8;
int c=(a>b)?a++:b++;
System.out.println("a="+a+"\tb="+b+"\tc="+c); // a = 3 b =9 c = 8
int d=(a>b)?++a:++b;
System.out.println("a="+a+"\tb="+b+"\td="+d); // a = 3 b =10 d = 10
int e=(a<b)?a++:b++;
System.out.println("a="+a+"\tb="+b+"\te="+e); // a = 4 b =10 e = 3
int f=(a<b)?++a:++b;
System.out.println("a="+a+"\tb="+b+"\tf="+f); // a = 5 b =10 f= 5
}
}
一、for循环
1、打印5次i love you 和 printf的用法
for (int i = 0; i < 5; i++) {
//System.out.println("I love you!!!");
System.out.print("I love you!!!\t");
}
String name = "zhangsan";
int age = 10;
System.out.printf("你的名字是%s,你的年龄是%d",name,age);
2、打印100以内 能被4整除不到能被7整除的数据,每行打印6个
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 9:42
* @Version 1.0
*/
public class Demo02 {
// 打印100以内 能被4整除不到能被7整除的数据,每行打印6个
public static void main(String[] args) {
int loop = 0;// 记录目前打印的个数
for (int i = 0; i <= 100; i++) {
if(i % 4 == 0 && i % 7 != 0){
System.out.print(i+"\t");
loop++;
if(loop == 6){
System.out.println();
loop = 0;
}
}
}
}
}
3、变异的for循环
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 9:36
* @Version 1.0
*/
public class Demo03 {
public static void main(String[] args) {
int i = 0;
for (; i < 5; ) {
//System.out.println("I love you!!!");
System.out.print("I love you!!!\t");
i++;
}
// 此处是死循环,需要进行条件判断后,break 才能出去
for(;;){
System.out.println("我能够出去.....");
}
}
}
4、100以内所有偶数之和
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 9:51
* @Version 1.0
*/
public class Demo04 {
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 100; i++) {
if(i % 2 == 0){
count += i;
}
}
System.out.println(count);
}
}
5、统计1到100之间分别能被3整除或5整除或同时被3和5整除的数字个数并打印
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 9:53
* @Version 1.0
*/
public class Demo05 {
// 统计1到100之间分别能被3整除或5整除或同时被3和5整除的数字个数并打印
public static void main(String[] args) {
int threeNum = 0,fiveNum =0 , threeAndFiveNum = 0;
for (int i = 1; i <= 100; i++) {
if(i % 3 == 0){
threeNum++;
}
if (i % 5 == 0){
fiveNum++ ;
}
if (i % 5 == 0 && i % 3 ==0){
threeAndFiveNum++ ;
}
}
System.out.printf("能被3整除的个数有:%d,能够被5整除的个数有%d,能够同时被3和5整除的个数有%d",threeNum,fiveNum,threeAndFiveNum);
}
}
6、九九乘法表两种方式
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 10:01
* @Version 1.0
*/
public class Demo06 {
//九九乘法表
// 第一种: 能否只用一层for循环搞定99 乘法表
public static void main(String[] args) {
// 打印45次即可
int hang = 1;
int lie = 1;
for (int i = 1; i <= 45; i++) {
/**
* 1 1*1 =1
* 2 1*2 =2 2*2=4
*/
System.out.print(hang+"*" +lie+"=" +(hang*lie)+"\t");
if(hang == lie){
System.out.println();
lie = 0;
hang++ ;
}
lie++;
}
}
}
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 10:01
* @Version 1.0
*/
public class Demo07 {
//九九乘法表
// 第一种: 能否只用一层for循环搞定99 乘法表
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+(i*j) +"\t");
}
System.out.println();
}
}
}
7、判断一个数是否为质数
全部的整数分为三部分: 1 、质数 和 合数
任何的合数都可以分解为质数的乘积。
质数:只能被1和自身整除的数字称之为质数。
package com.qfedu.day02;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 10:20
* @Version 1.0
*/
public class Demo08 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = scanner.nextInt();
boolean isZhi = true;// 默认都不是
for (int i = 2; i < num; i++) {
if(num % i == 0){
isZhi = false;
break;
}
}
System.out.println( isZhi ? "是质数" : "不是质数");
}
}
8、时间复杂度
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 11:00
* @Version 1.0
*
* 所谓的时间复杂度就是代码执行的次数的 近似值,可以将变量想象为无穷大。
*/
public class ShijianFuzaDu {
public static void main(String[] args) {
int a = 10;
System.out.println(a); // 2 次 常数 O(1) = 1
int n = 100;
for (int i = 0; i < n; i++) {
System.out.println(i);
}
// 时间复杂度 O(n) = n
// 两层循环的,时间复杂度 m * n = n^2
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+(i*j) +"\t");
}
System.out.println();
}
}
}
二、while循环
语法:
while(条件表达式){
循环体
}
package com.qfedu.day02;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 11:14
* @Version 1.0
*/
public class Demo10 {
public static void main(String[] args) {
int i = 0;
while(i<10) {
System.out.println("我爱编程,我爱大数据!");
i++;
}
/**
* 阶乘函数(符号:!)的意思是把逐一减小的自然数序列相乘。例如:
*
* 4! = 4 × 3 × 2 × 1 = 24
* 7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040
* 1! = 1
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个不是特别大的数字:");
System.out.println("int 的最大值:"+Integer.MAX_VALUE);
int num = scanner.nextInt();
int yuanNum = num;
int count = 1;
while(num>0){
count *= num;
num--;
}
System.out.println(yuanNum+"的阶乘是:"+count);
}
}
三、do-while 循环
语法:
do-while语句由 do关键字 大括号 while关键字 小括号号和相关语句组成
基本格式如下:
do{
循环体
}while(条件表达式);
do 代码块中的语句肯定会执行至少一次,下一次是否执行取决于while中的条件是否为真。
代码:
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 11:28
* @Version 1.0
*/
public class Demo11 {
public static void main(String[] args) {
int i = 0;
do{
System.out.println("i sike you");
i++;
}while(i <= 2);
int m = 0;
do{
if(m % 2 != 0){
System.out.println(m+"是奇数");
}
m++;
}while(m < 100);
int n = 1;
do{
System.out.println(n+"是奇数");
n = n + 2;
}while(n < 100);
}
}
区别:
1.while 先执行循环条件,然后在执行循环体,一句话:先判断,再执行
2.do/while 先执行循环体 然后在执行循环条件,一句话:先执行,再判断
当第一次 就不满足循环条件的情况下 while循环不能执行循环体, do while 可以执行一次
四、break和continue的区别
break : 跳出当前循环体,不再进入
continue: 跳出本次循环,进入下一次即可。
package com.qfedu.day02;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 11:39
* @Version 1.0
*
* break 在一个循环体中,如果遇到break,直接跳出该循环,结束了,进入下一个循环体或者执行以后的代码
* continue: 结束本次循环,进入下一次循环,比如3 这次循环结束了,该 4 这次的循环了。
*/
public class Demo12 {
public static void main(String[] args) {
// 如果数字是8 就结束循环
for (int i = 0; i < 10; i++) {
// 3 5 7 9
if(i % 2 != 0 ){
continue;
}
if(i == 8){
break;
}
}
for(int m = 1; m < 10 ; m++){
for (int n = 1; n <= m; n++) {
System.out.print(m+"*"+n+"="+(m*n) +"\t");
if(n == 3){
break;
}
}
System.out.println();
if(m == 5){
break;
}
}
}
}
五、多重循环练习
课堂练习2:键盘上输入三个数值,分表表示三角形的三条边长。
需要先判断三条边长是否可以构成三角形。
两边之和大于第三边,两边之差小于第三边
如果可以打印输出周长和面积,如果不能,
需要键盘再次输入,最多3次 使用while循环
周长 = a + b + c
面积 = 海伦公式
package com.qfedu.day02_2;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 14:42
* @Version 1.0
*/
public class Demo02 {
/**
* 课堂练习2:键盘上输入三个数值,分表表示三角形的三条边长。
* 需要先判断三条边长是否可以构成三角形。
* 两边之和大于第三边,两边之差小于第三边
* 如果可以打印输出周长和面积,如果不能,
* 需要键盘再次输入,最多3次 使用while循环
* 周长 = a + b + c
* 面积 = 海伦公式
*
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = 0;
do{
System.out.println("请输入一个三角形的三边:");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
if((a+b)>c && (a+c)>b && (b+c)>a){
System.out.printf("%d,%d,%d,三个值可以组成三角形",a,b,c);
int zhouChang = a+b+c;
System.out.println("该三角形的周长是:"+zhouChang);
float p = zhouChang / 2.0f;
// Math.sqrt(数字) 对某个数字开根号
double area = Math.sqrt(p*(p-a)*(p-b)*(p-c));
System.out.println("该三角形的面积是:"+area);
break;
}else{
System.out.printf("%d,%d,%d,三个值不能组成三角形,请重新输入",a,b,c);
count++;
}
}while(count<3);
}
}
求1000以内的完数
完数定义:若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。例如,6=1+2+3
package com.qfedu.day02_2;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 15:04
* @Version 1.0
*/
public class Demo03 {
/*
求1000以内的完数
完数定义:若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。例如,6=1+2+3
*/
public static void main(String[] args) {
// 获取1000以内的每一个数字的因数
// 将因数相加 判断是否等于该数本身
// 28 1 + 2 + 4 + 7 + 14
for (int i = 1; i < 1000; i++) {
int sum = 0;// 因数相加的结果
for (int j = 1; j < i; j++) {
// i=6 就代表要判断的数字 j 就是i 的需要判断的因数,我们要判断该数字是不是i的因数
if( i % j ==0){
sum += j;
}
}
if(sum == i){
System.out.println(i+"是完数");
}
}
}
}
六、方法
1、方法的作用
1) 代码可以重复利用。
2) 让整个代码便于理解
将来尽可能的将一段代码拆分为多个方法,然后相互调用。
2、方法的声明
访问权限修饰符 其它修饰符 返回值类型 方法名(参数列表){
方法体代码
return 返回值;(如果返回值类型为 void 此行可省略)
}
/*
public 权限修饰符
public protected private default
void 是返回值
main 就是该方法的方法名
起的方法名字要规范:
符合标识符的明名规范即可,一般要见名知意。
static 其他修饰符,静态的,该方法是静态方法。
String[] args 参数
*/
public static void main(String[] args) {
方法体
// return
}
1、没有参数也没有返回值的方法。
/**
* 没有参数也没有返回值的方法
* 该方法提供了一个功能:打印99乘法表
*/
public static void print99(){
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+(i*j) +"\t");
}
System.out.println();
}
}
2、没有参数有返回值的方法。
伪代码
public static int getNum(){
return 某个数字;
}
3、有参数没有返回值的方法。
/**
* 有参数,无返回值
* 提供一个方法,该方法可以接收一个数字,计算出该数字的阶乘
*/
public static void jieCheng(int num){
int yuanNum = num;
int count = 1;
while(num>0){
count *= num;
num--;
}
System.out.println(yuanNum+"的阶乘是:"+count);
}
4、有参数也有返回值的方法。
package com.qfedu.day02_3;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 16:21
* @Version 1.0
*/
public class Demo02 {
/**
* 判断一个数是否为质数
* @param num num表示要判断的数字
* @return 返回true表示是质数,否则不是
*
* 有参数又有返回值
*/
public static boolean isZhiShu(int num){
boolean isZhi = true;// 默认都不是
for (int i = 2; i < num; i++) {
if(num % i == 0){
isZhi = false;
break;
}
}
return isZhi;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = scanner.nextInt();
boolean isZhi = isZhiShu(num);
System.out.println(isZhi ? "是" : "否");
}
}
5、有返回值,有两个参数的方法,方法的功能为 计算指定数字的n次方的值
package com.qfedu.day02_3;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 16:34
* @Version 1.0
*/
public class Demo03 {
public static int computeNumCiFang(int num,int ciFang){
int count = 1 ;
for (int i = 0; i < ciFang; i++) {
count *= num;
}
return count;
}
public static void main(String[] args) {
int i = computeNumCiFang(2, 3);
System.out.println(i);
}
}
6、方法的重载
方法的重载:
java支持一个类中有多个方法名是一样的 方法
方法的重载:方法名相同,参数个数不同,类型不同,顺序不同 称之为重载
跟返回值、访问修饰符、其他修饰符无关。
常见于类中的构造方法中
package com.qfedu.day02_3;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/2 16:54
* @Version 1.0
*
* 方法的重载:
* java支持一个类中有多个方法名是一样的 方法
* 方法的重载:方法名相同,参数个数不同,类型不同,顺序不同 称之为重载
* 跟返回值、访问修饰符、其他修饰符无关。
* 常见于类中的构造方法中
*/
public class Demo05 {
public static int show(){
return 10;
}
public static int show(int a){
return 10;
}
public static int show(int a,int b){
return 10;
}
public static int show(double a,int b){
return 10;
}
public static int show(int b,double a){
return 10;
}
}
IDEA工具自动导入包的设置: