Day1
eg1:猜数字游戏
package test;
import com.company.Main;
import jdk.net.NetworkPermission;
import java.util.Scanner;
public class Demo02 {
/*
* Java:静态面向对象编程语言的代表
* sun--->2004年被甲骨文收购了 mysql也隶属于甲骨文了
*
* static:
*一,数据类型:
* 作用:告知系统将要存储的数据需要多大的空间
* 分类:
* 引用数据类型:数组 类 接口 枚举
* 基本数据类型:
* 数值型:
* 整数型:byte(1) short(2) int(4) long(8)
* 浮点型: float(4) double(8)
* 字符型: char(2) 字符型变量需要用单引号引用
* 布尔型:boolean(1) true false
*
* 二,基本数据类型的转换
* 优先级
* byte,short()<int<long<float<double
*
* 自动转换:低优先级向高优先级转换
* 强制转换:高优先级向低优先级转换
*
* 注意:
* 程序中所有的整数默认类型为int
* 程序中所有的小数默认为double
*
* 三,变量
* 分类:
* 全局变量:属性 声明在类体中的变量
* 局部变量:声明在方法体或者代码块
* 变量的作用域:
* 全局变量的作用是从声明开始,一直到类体的使用结束
* 局部变量的作用是从声明开始,一直到方法或者代码块的结束
*
* 注意:
* 局部变量在使用之前必须进行初始化
* 全局变量如果不进行初始化,系统会自动分配
* static关键字表示静态成员(修饰类的成员)
* break
* continue
* */
public static void main(String[] args) {
test1();
//所有方法的执行和运行 都需要在主函数中
// Java中不允许在一个类中存在同名方法
}
public static void test1(){
// eg:猜数字小游戏
// 1.根据随机数,产生一个数字,范围(0-100)
// 2.猜测他的大小,如果猜测的数字大于随机数的数字,那么提示猜大了
// 3.如果小于,提示猜小了
// 4.通过猜对过程中使用的次数,判断你的智商等
System.out.println("guess the number");
//定义变量的格式: 类型名 变量名=变量值
// 常量:值不可以改变的数据
// 特点:一个常量只能存储一个数据 一旦被初始化那么久不能再次赋值 final 修饰常量
// 1.定义一个随机数Math.random()默认随机一个0-1之间的随机数
//遇到报错,万能键 Alt+回车键
int num = (int) (Math.random()*100);
// System.out.println(num);
System.out.println("游戏开始!");
// 2.控制台输入的声明定义
Scanner scanner = new Scanner(System.in);
// 错误:红色的才需要处理 警告:深黄色(不需要进行处理)
// 注意:不是虽有的警告都不会报错(报红色)
int cai = scanner.nextInt();
// System.out.println(cai);
// 分支
/*单分支:
* if(){}else{}
* 多分支:
* if(判断表达式1){
* } else if(判断表达式2){
*
* }else if(判断表达式3){
* }
* 注意:Java中不建议多分支的判断超过3个
* switch case 选择语法
* */
// 循环
/*
* for(int i=0;i<9;i++){
* 结果
* }
* while(判断表达式){
* 结果
* }
* do{
* 先执行的代码
* }while(判断表达式)
*
* */
// 次数的变量值
int count = 1;
do{
if (cai>num){
System.out.println("大了大了,");
}else if (cai<num){
System.out.println("小了小了,");
}else {
System.out.println("猜对了");
break;//跳出
}
count++;
cai = scanner.nextInt();
}while (cai!=num);
System.out.println("你一共猜了"+count+"次");
// 等级判断
switch (count){
case 1:
System.out.println("TQL,一发入魂,yyds!!!");
break;
case 2:
case 3:
case 4:
case 5:
System.out.println("Just so so !");
break;
default:
System.out.println("菜鸡互啄!");
}
}
运行结果:
guess the number
游戏开始!
10
小了小了,
50
大了大了,
30
小了小了,
40
小了小了,
48
大了大了,
45
大了大了,
44
你一共猜了7次
菜鸡互啄!
Process finished with exit code 0
eg2:模拟登陆和注册
package test;
import com.company.Main;
import jdk.net.NetworkPermission;
import java.util.Scanner;
public class Demo02 {
/*
* Java:静态面向对象编程语言的代表
* sun--->2004年被甲骨文收购了 mysql也隶属于甲骨文了
*
* static:
*一,数据类型:
* 作用:告知系统将要存储的数据需要多大的空间
* 分类:
* 引用数据类型:数组 类 接口 枚举
* 基本数据类型:
* 数值型:
* 整数型:byte(1) short(2) int(4) long(8)
* 浮点型: float(4) double(8)
* 字符型: char(2) 字符型变量需要用单引号引用
* 布尔型:boolean(1) true false
*
* 二,基本数据类型的转换
* 优先级
* byte,short()<int<long<float<double
*
* 自动转换:低优先级向高优先级转换
* 强制转换:高优先级向低优先级转换
*
* 注意:
* 程序中所有的整数默认类型为int
* 程序中所有的小数默认为double
*
* 三,变量
* 分类:
* 全局变量:属性 声明在类体中的变量
* 局部变量:声明在方法体或者代码块
* 变量的作用域:
* 全局变量的作用是从声明开始,一直到类体的使用结束
* 局部变量的作用是从声明开始,一直到方法或者代码块的结束
*
* 注意:
* 局部变量在使用之前必须进行初始化
* 全局变量如果不进行初始化,系统会自动分配
* static关键字表示静态成员(修饰类的成员)
* break
* continue
* */
public static void main(String[] args) {
test2();
//所有方法的执行和运行 都需要在主函数中
// Java中不允许在一个类中存在同名方法
}
// eg2:
/* 模拟登陆和注册
* 1.控制台上运行,每一次的运行都是基于控制台
* 2.注册 (系统不会限制你的注册次数)
* 3.注册 输入两次密码,判断两次密码的正确性
* 4.登陆 限制三次 超过三次 就限制登陆(结束程序,终止程序)
* */
public static void test2(){
//1.控制台输入
Scanner scanner = new Scanner(System.in);
// 输入用户名和密码
String username = "";
String password = "";
// 注册
//while (true)
for (;;){
System.out.print("请输入你要注册的用户名:");
String user = scanner.nextLine();
System.out.print("请输入你要注册的密码:");
String pwd1 = scanner.nextLine();
System.out.print("请输入你要确认的密码:");
String pwd2 = scanner.nextLine();
//判断两次密码的正确性 再去赋值
//equals() 可以判断任何类型的长度和字符内容
if (pwd1.equals(pwd2)) {
System.out.println("注册成功!");
//将注册的值进行赋值
password = pwd1;
username = user;
}
//登陆
for (int i=1;i<=3;i++){
System.out.print("请输入你要登陆的用户名:");
String NewUsername = scanner.next();
System.out.print("请输入你要登陆的密码:");
String NewPassword = scanner.next();
//判断输入的密码与注册的是否对应
//逻辑运算符
// 逻辑与: && ---符号两边同时满足要求
// 逻辑或: || ---符号两边只要有一边满足即可
// 逻辑非: ! ---
//逻辑运算同样满足 :短路原则
if (NewUsername.equals(username)&&NewPassword.equals(password)) {
System.out.println("恭喜您,登陆成功!");
break;
//continue 继续
}else {
System.out.println("用户名或密码错误,你还有"+(3-i)+"次机会");
if (i==3){
System.out.println("由于你在输入用户名或密码出现多次错误,请核对后稍后再进行重试!");
break;
}
}
}
break;
}
}
输出:
成功登陆:
请输入你要注册的用户名:admin
请输入你要注册的密码:123456
请输入你要确认的密码:123456
注册成功!
请输入你要登陆的用户名:admin
请输入你要登陆的密码:123456
恭喜您,登陆成功!
登陆失败:
请输入你要注册的用户名:admin
请输入你要注册的密码:admin
请输入你要确认的密码:admin
注册成功!
请输入你要登陆的用户名:admin
请输入你要登陆的密码:123456
用户名或密码错误,你还有2次机会
请输入你要登陆的用户名:1123
请输入你要登陆的密码:11
用户名或密码错误,你还有1次机会
请输入你要登陆的用户名:1
请输入你要登陆的密码:1
用户名或密码错误,你还有0次机会
由于你在输入用户名或密码出现多次错误,请核对后稍后再进行重试!
eg3:冒泡排序
package test;
import com.company.Main;
import jdk.net.NetworkPermission;
import java.util.Scanner;
public static void main(String[] args) {
test3();
public class Demo02 {
/*eg3:冒泡排序
* 数组
*
* 一,数组的使用:
* 下标访问:从0开始
* 数组长度:length属性
* arr.length
* 数组的遍历:
* 普通的for循环 借助数组的下标进行循环(默认换行输出)
* 增强for循环
* 数组元素的重新赋值:
* 给某个元素 利用下标赋值
* 给所有元素 (必须用循环才可以)
* 元素的查找:
* 顺序查找,二分法,冒泡,快速查找
* 排序:
* 选择排序
*
* 二,多维数组
* 1.数组中可以存储基本数据类型,也可以存储引用的数据类型
* 二维数组:
* 一个数组中,所有的元素还是数组
*
* */
// 冒泡排序
// 要求:在控制台上输入N个数字,进行排序
public static void test3(){
System.out.print("请输入数组位数:");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//定义一个数组为arr,元素个数为n的整形数组
int[] arr = new int[n];
System.out.print("请输入数组元素:");
//使用循环进行元素的添加 数组中的元素下标进行
for (int i=0;i<n;i++){
//将键盘输入的元素一次放入数组
arr[i] = scanner.nextInt();
}
System.out.println(arr[0]);
// 上面的操作相当于--->定义一个有元素的数组
//下面进行排序
for (int i=0;i<arr.length;i++){
for (int j=0;j<arr.length-i-1;j++){
//比较相邻2个元素的大小
if (arr[j]<arr[j+1]){
//交换元素位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("冒泡排序完之后的数组为:");
// 增强for int 类型
for(int num:arr){
System.out.println(num);
}
}
}
输出:
请输入数组位数:5
请输入数组元素:
23
14
25
36
12
冒泡排序完之后的数组为:
36
25
23
14
12
Day1 作业:
//1.定义一个数组,实现冒泡排序
//2.将上面排序好的数组,进行逆序输出
//3.在控制台输入一个日期,判断这个日期是这一年的第几天?
//4.设计一个程序,静态初始化一个整形数组,将这个数组中的每个元素向前移动一位,将第一个元素移动到最后一个位置
例:原数组:int[] arr = {1,2,3,4,5};
执行完程序数组变为:int[] arr = {2,3,4,5,1};
//5.设计一个程序,键盘输入一个三位数,计算出这个数的各位之和
例:123计算结果为1+2+3=6
代码如下:
package test;
import java.util.Scanner;
public class Day1 {
public static void main(String[] args) {
System.out.println("\n第一题和第二题:冒泡排序");
bubble_sort();
System.out.println("\n第三题:得到某年第几天");
getDateNum();
System.out.println("\n第四题:数组移位");
work4();
System.out.println("\n第五题:三位数和");
work5();
}
//1.定义一个数组,实现冒泡排序
public static void bubble_sort(){
int[] arr = new int[]{25, 15, 25, 43, 25, 63, 77, 95, 72, 0};
System.out.println("初始序列:");
for(int num:arr){
System.out.print(" "+num);
}
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-i-1;j++){
if (arr[j]<arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
System.out.println();
System.out.println("冒泡排序后得到的结果为:");
for(int num:arr){
System.out.print(" "+num);
}
System.out.println();
//2.将排序好的数组逆序输出
System.out.println("逆序后得到的结果为:");
for(int i=arr.length-1;i>=0;i--){
System.out.print(" "+arr[i]);
}
System.out.println();
}
//3.在控制台输入一个日期,判断这个日期是这一年的第几天?
public static void getDateNum(){
Scanner scanner = new Scanner(System.in);
System.out.println("输入年月日");
// 定义一个数组存3位数
int[] inputDate = new int[3];
for(int i=0;i<3;i++){
inputDate[i] = scanner.nextInt();
}
// 定义变量年月日,并赋值
int year = inputDate[0]; // 得到年
int month = inputDate[1]; // 得到月
// 判断月份是否合法
if (month > 12 || month < 0){
System.out.println("对不起,我还没听说过一年有"+month+"个月呢?");
System.exit(1);
}
// 定义一个二月,用来存放2月天数
int february;
if (year % 4 == 0 || year % 100 == 0 || year % 400 == 0) {
// 闰年29,否则28
february = 29;
} else {
february = 28;
}
// 判断用户输入的日期是否合法
if (month==1||month==3||month==5||month==7||month==8||month==10||month==12){
if (inputDate[2] > 31 || inputDate[2] < 0){
System.out.println("你小学没学好吧,这年的"+month+"月有"+inputDate[2]+"天吗?");
System.exit(1);
}
}else if (month == 2){
if(inputDate[2] > february || inputDate[2] < 0){
System.out.println("建议重读小学,这年的"+month+"月有"+inputDate[2]+"天?");
System.exit(1);
}
}else {
if(inputDate[2] > 30 || inputDate[2] < 0){
System.out.println("建议直接退学吧,你都大学了,"+month+"月有"+inputDate[2]+"天?");
System.exit(1);
}
}
int day = inputDate[2]; // 得到日
// 默认第0天开始
int dayNum = 0;
// 若为12月,总天数就是前几个月所有加上12月那几天
switch (month-1){
case 11:dayNum+=30;
case 10:dayNum+=31;
case 9:dayNum+=30;
case 8:dayNum+=31;
case 7:dayNum+=31;
case 6:dayNum+=30;
case 5:dayNum+=31;
case 4:dayNum+=30;
case 3:dayNum+=31;
case 2:dayNum+=february;
case 1:dayNum+=31;
}
// 加上本月那几天
dayNum += day;
System.out.println(month+"月"+day+"日是"+year+"的第"+dayNum+"天!");
}
// 4.设计一个程序,静态初始化一个整形数组,将这个数组中的每个元素向前移动一位,将第一个元素移动到最后一个位置
// 例:原数组:int[] arr = {1,2,3,4,5};
// 执行完程序数组变为:int[] arr = {2,3,4,5,1};
public static void work4(){
int[] arr = {1,2,3,4,5};
System.out.println("初始序列:");
for(int num:arr){
System.out.print(" "+num);
}
System.out.println();
int temp = arr[0];
for (int i=0;i<arr.length-1;i++){
arr[i] = arr[i+1];
}
arr[arr.length-1] = temp;
System.out.println("经过置换后得到的为:");
for(int num:arr){
System.out.print(" "+num);
}
System.out.println();
}
// 5.设计一个程序,键盘输入一个三位数,计算出这个数的各位之和
// 例:123算结果为1+2+3=6
public static void work5(){
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个三位数:");
int num = scanner.nextInt();
int n1 = (int) num/100; // 百位
int n2 = (int) num%100/10; // 十位
int n3 = (int) num%10; // 个位
System.out.println(n1+"+"+n2+"+"+n3+"="+(n1+n2+n3));
}
}
输出结果:(注意,这里在第三题,在二月份判断闰年和平年时,如果你输入的年份月数的天数与其不对应时,有一个判断,会直接停止运行程序)
第一题和第二题:冒泡排序
初始序列:
25 15 25 43 25 63 77 95 72 0
冒泡排序后得到的结果为:
95 77 72 63 43 25 25 25 15 0
逆序后得到的结果为:
0 15 25 25 25 43 63 72 77 95
第三题:得到某年第几天
输入年月日
2021 2 26
1月2日是2021的第2天!
第四题:数组移位
初始序列:
1 2 3 4 5
经过置换后得到的为:
2 3 4 5 1
第五题:三位数和
输入一个三位数:
468
4+6+8=18