(了解)位运算和二进制有关
左移 <<
右移 >>
package com.kgc;
//左右移
public class Demo01 {
public static void main(String[] args) {
int a=10;
System.out.println(a<<3);
/*
10的二进制左移三位
00001010
01010000 64+16=80
*/
System.out.println(a>>3);
/*
10的二进制右移三位
00001010
00000001 0100 1 后面溢出
*/
}
}
程序是按照顺序执行 , 从上往下
输出 , 从上往下
输入(实际工作中没用 , 为了练习使用在命令窗口输入一些数据,被程序获取)
步骤
先准备一个输入的工具
输入一个输入的入口
package com.kgc;
public class Demo02 {
public static void main(String[] args) {
//准备一个输入的工具
java.util.Scanner input=new java.util.Scanner(System.in);
//准备输入入口
System.out.print("请输入年龄:");
int age=input.nextInt();
System.out.println("您输入的年龄是:"+age);
}
}
单分支
语法 : if(条件){代码块}
原理 : 如果条件成立,则执行代码块; 如果条件不成立,则不执行代码块
特点 :
package com.kgc;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//输入工具
Scanner sc = new Scanner(System.in);
//输入入口
System.out.print("输入分数:");
double score = sc.nextDouble();
if (score>700){
System.out.println("奖励");
}
}
}
双分支
语法 : if(条件){代码块1}else{代码块2}
原理 : 条件成立执行代码块1,条件不成立执行代码块2
特点 :
//键盘输入一个数,判断是奇数还是偶数
package com.kgc;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入一个整数:");
int number = sc.nextInt();
if (number%2==0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
}
多分支
语法 : if(条件1){代码块1}else if(条件2){代码块2}…else{代码块n}
原理 : 如果条件1成立执行代码块1,结束整个if ; 如果条件1不成立,判断条件2是否成立,如果不成立判断条件3 ; 如果都不成立执行else代码块n
/*输入成绩
如果满分奖励一次
高于90假发
高于80洗发水
高于60洗面奶
否则无奖励
*/
package com.kgc;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
System.out.println("请输入成绩:");
if (score==100){
System.out.println("一次");
}else if (score>90){
System.out.println("假发");
}else if (score>80){
System.out.println("洗发水");
}else if (score>60){
System.out.println("洗面奶");
}else{
System.out.println("无奖励");
}
}
}
选择结构
语法
语法格式:
switch(){
case 值1:
代码块1;
break;
case 值2:
代码块2;
break;
...
default :
代码块n;
break;
}
原理
注意
//练习
package com.kgc;
import java.util.Scanner;
public class Demo09_Month {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入月份:");
int month = sc.nextInt();
switch (month){
case 1:
case 2:
System.out.println("冬季");
case 3:
case 4:
case 5:
System.out.println("春季");
case 6:
case 7:
case 8:
System.out.println("夏季");
case 9:
case 10:
case 11:
System.out.println("秋季");
case 12:
System.out.println("冬季");
}
}
}
为了提高复用性,提高扩展性和可维护性
while循环
语法 : while(循环条件){代码块}
原理 : 循环条件成立时,则执行代码块,执行完代码块会再次回来循环条件判断的位置,如果依然成立,则再次执行代码,知道循环条件不成立为止(循环结构结束)
控制循环次数
//打印五次helloworld
package com.kgc;
public class Demo10_Print5 {
public static void main(String[] args) {
int i=0;
while (i<5){
System.out.println("HelloWorld");
i++;
}
}
}
//打印1-5,在打印5-1
package com.kgc02;
public class Demo01_Xunhuan {
public static void main(String[] args) {
int i=1;
while(i<6){
System.out.println(i);
i++;
}
while(i>1){
i--;
System.out.println(i);
}
}
}
//输出1-100之间的和
package com.kgc02;
public class Demo02_Xunhuan {
public static void main(String[] args) {
int i=1,sum=0;
while (i<101){
sum+=i;
i++;
}
System.out.println(sum);
}
}
//输出1-100之间的偶数和
package com.kgc02;
public class Demo03_Xunhuan {
public static void main(String[] args) {
int i=1,sum=0;
while (i<101){
if(i%2==0){
sum+=i;
}
i++;
}
System.out.println(sum);
}
}
//不断输入正数,输出啥打印啥,知道输入-1为止
package com.kgc02;
import java.util.Scanner;
public class Demo04_Xunhuan {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.print("输入一个数:");
int i = sc.nextInt();
if(i==-1){
break;
}else System.out.println(i);
}
}
}
//班级有五位同学,依次输入每位同学的java成绩,求出总成绩的最高分,平均分,最低分
package com.kgc02;
import java.util.Scanner;
public class Demo05_Xunhuan {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
float i=1,sum=0,max=0,min=100;
float avg=0;
while (i<=5){
System.out.print("请输入第"+i+"个同学的成绩:");
float score = sc.nextInt();
sum+=score;
if (score>max){
max=score;
}
if (score<min){
min=score;
}
avg=(float)(sum/i);
++i;
}
System.out.println("总成绩:" + sum);
System.out.println("最大:" + max);
System.out.println("最小:" + min);
System.out.println("平均分:" + avg);
}
}
循环嵌套(循环内有完整的循环)
//打印图形
package com.kgc02;
public class Demo06_Rectangle {
public static void main(String[] args) {
int i=1;
while (i<=3){
int j=1;
//while(j<=i) 打印直角三角形
while (j<=4) {
System.out.print("*");
j++;
}
System.out.println();//换行功能
i++;
}
}
}
//九九乘法表
package com.kgc02;
public class Demo_MultiplicationTable {
public static void main(String[] args) {
int i = 1;
while (i <= 9) {
int j = 1;
while (j <= i) {
System.out.print(j + "×" + i + "=" + i*j + "\t");
j++;
}
System.out.println();
i++;
}
}
}
for循环
语法 : for(循环变量的声明;循环条件;循环变量的改变){代码块}
把循环的三要素,总结到了一行(小括号内)
确定循环次数的情况下,使用for循环
不确定循环次数的情况下,使用while循环
//for循环实现九九乘法表
package com.kgc02;
public class Demo09_Forloop {
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for (int j=1;j<=i;j++){
System.out.print(j + "×" + i + "=" + i*j + "\t");
}
System.out.println();
}
}
}
do…while
语法 : do{代码块}while(循环条件);
原理 : 执行代码块,然后再判断循环条件,如果成立则继续执行代码块,如果不成立则循环结束
特点 : do…while至少无条件循环一次
场景 : 不确定循环次数时使用
//登录,输入用户名和密码(username=root,password=123)
package com.kgc02;
import java.util.Scanner;
public class Demo10_Sign {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String userName;
String passWord;
boolean flag=true;
do {
System.out.print("请输入用户名:");
userName = sc.next();
System.out.print("请输入密码:");
passWord = sc.next();
if (userName.equals("root")&&passWord.equals("123")){
System.out.println("欢迎登录!");
flag=false;
}else if (userName.equals("quit")||passWord.equals("quit")){
System.out.println("欢迎再来!");
flag=false;
}else{
System.out.println("用户名或密码错误,请重新输入");
}
}while (flag);
}
}
break
continue
用于结束本次循环,直接进入下一次循环
//数7游戏(数字中带7的或7的倍数不行,不打印)
package com.kgc02;
import java.util.Scanner;
public class Demo11_Count7 {
public static void main(String[] args) {
int number=0;
Scanner sc = new Scanner(System.in);
while (true){
number++;
if (number>30){
System.out.println("再见!");
break;
}else if (number%7==0 || number%10==7){
System.out.println("过");
continue;
}else {
System.out.println(number);
}
}
}
}
容器 : 将多个数据存储在一起,每个数据都称为该容器的元素
数组 : 数组就是用于存储数据的长度固定的容器,保证多个数据的数据类型要一致
数组的特点
数组的定义
方式一 :静态初始化
方式二 :静态初始化
方式三 :动态初始化
//定义一个数组,保存五个人的名字
package com.kgc01;
public class Demo01 {
public static void main(String[] args) {
//方式一
String[] names1 = {"张三", "李四"};
//方式二
String[] names2 = {"王五","赵六"};
//方式三
String[] names3;
names3 = new String[]{"张三", "李四"};
String[] names4 = new String[5];
names4[0]="zhang";
System.out.println(names4[0]);
}
}
//保存五个人的java成绩
package com.kgc01;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] score = new int[5];
for(int i=0;i<5;i++){
System.out.print("请输入第"+(i+1)+"个人的成绩:");
score[i]=sc.nextInt();
}
System.out.println(score[2]);
}
}
[] 表示的是一个数组
数组名 : 起一个变量名,满足标识符的规范,后边可以用这个名字操作数组
new : 关键字,创建数组时使用的,数组本身是一个引用数据类型,所以需要用new创建一个数组对象
[长度] : 数组的长度,表示数组容器中可以存放多少个元素(一旦制定不能修改)
索引 : 每个存储的数组中的元素,都会自动拥有一个编号,从0开始称为数组索引(index)
索引范围 : [o,数组的长度-1]
数组的长度 : 每个数组都有一个长度,是固定的,Java给了数组的一个属性,可以获取数组的长度(数组名.length),执行后可以得到数组的长度(int类型的结果)
数组的遍历 : 把数组中的每一个元素都获取出来,这就是遍历
//遍历数组
int Max=0,Min=100,Sum=0;
for(int i=0;i<score.length;i++){
if(score[i]>Max){
Max=score[i]; }
if (score[i]<Min){
Min=score[i]; }
Sum+=score[i];
}
System.out.println("最高的成绩是:"+Max);
System.out.println("最低的成绩是:"+Min);
System.out.println("总成绩是:"+Sum);
内存相关
方法区
堆
栈
两个数组指向同一个地址
package com.kgc01;
public class Demo03 {
public static void main(String[] args) {
int[] num = new int[]{1,2,3,4,5};
System.out.println(num);// [I@1540e19d 堆内存的地址
int[] num2 = num;
num2[0]=99;
System.out.println(num[0]); // 99
System.out.println(num2[0]); // 99
}
}
注意事项
二维数组定义
定义一 : int [] [] score = new int [] []{{80,90,100},{10,20,30},{40,50,60}}
简写 : int [] [] score = {{80,90,100},{10,20,30},{40,50,60}}
定义二 : int [] [] score = new int [3] [4]
//从键盘输入3个组的java成绩,使用二维数组解析
package com.kgc01;
import java.util.Scanner;
//从键盘输入3个组的java成绩,使用二维数组解析
public class Demo01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] score = new int[3][4];
//为每一个学生赋值
for (int i=0;i<score.length;i++){
for (int j=0;j<score[i].length;j++){
System.out.print("请输入第"+(i+1)+"小组中第"+(j+1)+"个同学的java成绩:");
score[i][j]=sc.nextInt();
}
}
//遍历
for (int i=0;i<score.length;i++){
for (int j=0;j<score[i].length;j++){
System.out.println("第"+(i+1)+"小组中第"+(j+1)+"个同学的java成绩:"+score[i][j]);
}
}
}
}
Arrays类
排序
//输入五个同学的java成绩,进行排序
package com.kgc01;
import java.util.Arrays;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] scores = new int[5];
for (int i=0;i<scores.length;i++){
System.out.print("请输入第"+(i+1)+"个同学的java成绩:");
scores[i]=sc.nextInt();
}
System.out.println("排序前--------------------");
for (int i=0;i<scores.length;i++) {
System.out.println("第" + (i + 1) + "个同学的java成绩:"+scores[i]);
}
System.out.println("排序后---升序--------------");
//默认升序排序
Arrays.sort(scores);
for (int i=0;i<scores.length;i++) {
System.out.println("第" + (i + 1) + "个同学的java成绩:"+scores[i]);
}
//降序
System.out.println("排序后---降序--------------");
for (int i=scores.length-1;i>=0;i--){
System.out.println(scores[i]);
}
}
}
Arrays其他常用方法
格式 | 含义 |
---|---|
equals(数组1,数组2) | 比较两个数组是否相等 |
toString(array) | 将一个数组转换成一个字符串 |
fill(数组,值) | 把数组中的元素都赋值为一个值 |
copyOf(array,length) | 把数组array复制成一个长度为length的新数组 |
binarySearch(array,val) | 查找元素val在数组array中的下标,需要这个数组时有序的 |
package com.kgc01;
import javax.lang.model.type.ArrayType;
import java.util.Arrays;
//Arrays常用方法
public class Demo03 {
public static void main(String[] args) {
//equals(数组1,数组2) 比较两个数组是否相等
int[] arr1 = {10,20,30};
int[] arr2 = {10,20,30};
int[] arr3 = {40,50,60};
System.out.println(Arrays.equals(arr1,arr2));
System.out.println(Arrays.equals(arr1,arr3));
//toString(array) 将一个数组转换成一个字符串
System.out.println(Arrays.toString(arr1));
//fill(数组,值) 把数组中的元素都赋值为一个值
int[] arr4 = new int[3];
Arrays.fill(arr4,100);
System.out.println(Arrays.toString(arr4));
//copyOf(array,length) 把数组array复制成一个长度为length的新数组
int[] arr5 = {10,20,30,40};
int[] arr6 = Arrays.copyOf(arr5,6);
System.out.println(Arrays.toString(arr6));
//binarySearch(array,val) 查找元素val在数组array中的下标,需要这个数组时有序的
Arrays.sort(arr5);
System.out.println(Arrays.toString(arr5));
System.out.println(Arrays.binarySearch(arr5,30));
}
}
算法
数组顺序查找
package com.kgc01;
//需求 : 有一个数组,查找一个数在不在这个数组中,如果在打印下标,如果不存在打印不存在
public class Demo04 {
public static void main(String[] args) {
int[] arr1 = {10,20,30,24,46,78,25};
int value=78; //要查的数
int index=-1; //下标
for (int i=0;i<arr1.length;i++){
if (arr1[i]==value){
index=i;
break;
}
}
if(index==-1){
System.out.println(value+"不存在");
}else {
System.out.println(value+"的下标是"+index);
}
}
}
冒泡排序
package com.kgc01;
import java.util.Arrays;
//冒泡排序
public class Demo05 {
public static void main(String[] args) {
int[] arr = {33,44,66,99,66,62,57,78};
System.out.println(Arrays.toString(arr));
for (int i=0;i<arr.length-1;i++){ //轮数
for (int j=0;j<arr.length-1-i;j++){ //每一轮比较几次
//如果前边的比后边的大就换
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
二分法
package com.kgc02;
//二分法
public class Demo06 {
public static void main(String[] args) {
//已知一个有序的数组,查某一个数是否在数组中,是的显示下标,不是的显示不存在
int[] arr = {2,3,4,5,6,7,9,12,34,45,56,66,78,};
int value=3; //要查的数
int index=-1; //下标
int left=0;
int right=arr.length-1;
int mid=(left+right)/2;
while (left<=right){
if (value==arr[mid]){
index=mid;
break;
}else if (value>arr[mid]){ //往右继续查找
//移动左边界,使得mid往右移动
left=mid+1;
}else if (value<arr[mid]){ //往左继续查找
right=mid-1;
}
mid=(left+right)/2;
}
if (index==-1){
System.out.println(value+"不存在");
}else {
System.out.println("下标是"+index);
}
}
}
package com.kgc;
import java.util.Arrays;
import java.util.Scanner;
public class EatAliance {
public static void main(String[] args) {
// 菜单
String[] menusname = { "鱼香肉丝", "麻婆豆腐", "香辣猪蹄" };
double[] price = { 36.9, 19.9, 59.9 };
int[] star = { 0, 0, 0 };
// 订单人信息
String[] userName = new String[4];
String[] caiName = new String[4];
int[] caiCount = new int[4];
int[] time = new int[4];
String[] address = new String[4];
boolean[] status = new boolean[4];
double[] allPrice = new double[4];
// 程序开始
Scanner sc = new Scanner(System.in);
System.out.println("欢迎使用“吃货联盟订餐系统”");
while (true) {
int index = userName.length;
for (int i = 0; i < userName.length; i++) {
if (userName[i] == null) {
index = i;
break;
}
}
System.out.println("*********************");
System.out.println("1、我要订餐");
System.out.println("2、查看餐袋");
System.out.println("3、签收订单");
System.out.println("4、删除订单");
System.out.println("5、我要点赞");
System.out.println("6、退出系统");
System.out.println("*********************");
System.out.print("请选择");
int num = sc.nextInt();
switch (num) {
// 我要订餐
case 1:
if (index == 4) {
System.out.println("抱歉,现在订单已满,不可再次下单");
} else {
System.out.print("请输入订单人姓名:");
userName[index] = sc.next();
System.out.println("序号\t名称\t\t单价\t点赞数");
for (int i = 0; i < menusname.length; i++) {
System.out.println((i + 1) + "\t" + menusname[i]
+ "\t\t" + price[i] + "\t" + star[i]);
}
System.out.print("请输入序号点菜:");
int flag;
while (true) {
flag = sc.nextInt();
if (flag >= 0 && flag <= 3) {
caiName[index] = menusname[flag - 1];
break;
} else {
System.out.print("输入错误,请重新输入序号:");
}
}
System.out.print("请输入份数:");
while (true) {
int temp = sc.nextInt();
if (temp > 0) {
caiCount[index] = temp;
break;
} else {
System.out.print("输入错误,请重新输入数量:");
}
}
System.out.print("请输入送餐时间(10点~20点):");
while (true) {
int temp = sc.nextInt();
if (temp >= 10 && temp <= 20) {
time[index] = temp;
break;
} else {
System.out.print("输入错误,请重新输入时间(10点~2点):");
}
}
System.out.print("请输入送餐地址:");
address[index] = sc.next();
allPrice[index] = price[flag - 1] * caiCount[index];
if (allPrice[index] < 50) {
System.out.println("当单笔订单金额未达到50元时,需交纳6元送费");
allPrice[index] += 6;
}
System.out.println("订餐人信息");
System.out.println("姓名: \t" + userName[index]
+ "\n菜名: \t" + caiName[index] + "\n数量: \t"
+ caiCount[index] + "\n送餐时间:\t" + time[index]
+ "\n送餐地址:\t" + address[index] + "\n总金额: \t"
+ allPrice[index] + "¥");
}
System.out.print("输入0返回(或者任意整数)");
sc.nextInt();
break;
// 查看餐袋
case 2:
System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\状态\t总金额");
for (int i = 0; i < index; i++) {
System.out.println((i + 1) + "\t" + userName[i] + "\t"
+ caiName[i] + "\t\t" + caiCount[i] + "\t"
+ time[i] + "\t\t" + address[i] + "\t\t"
+ (status[i] ? "已签收" : "未签收") + "\t" +allPrice[i]
+ "¥");
}
System.out.print("输入0返回(或者任意整数)");
sc.nextInt();
break;
// 签收订单
case 3:
System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
for (int i = 0; i < index; i++) {
System.out.println((i + 1) + "\t" + userName[i] + "\t"
+ caiName[i] + "\t\t" + caiCount[i] + "\t"
+ time[i] + "\t\t" + address[i] + "\t\t"
+ (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
+ "¥");
}
System.out.print("请输入序号签收订单:");
while (true) {
int temp = sc.nextInt();
if (temp - 1 >= 0 && temp <= index) {
status[temp - 1] = true;
break;
} else {
System.out.print("输入错误,请重新输入序号:");
}
}
System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
for (int i = 0; i < index; i++) {
System.out.println((i + 1) + "\t" + userName[i] + "\t"
+ caiName[i] + "\t\t" + caiCount[i] + "\t"
+ time[i] + "\t\t" + address[i] + "\t\t"
+ (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
+ "¥");
}
System.out.print("输入0返回(或者任意整数)");
sc.nextInt();
break;
// 删除订单
case 4:
System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
for (int i = 0; i < index; i++) {
System.out.println((i + 1) + "\t" + userName[i] + "\t"
+ caiName[i] + "\t\t" + caiCount[i] + "\t"
+ time[i] + "\t\t" + address[i] + "\t\t"
+ (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
+ "¥");
}
System.out.print("请输入序号删除订单:");
while (true) {
int temp = sc.nextInt();
if (temp - 1 >= 0 && temp <= index) {
for (int i = temp - 1; i < index - 1; i++) {
userName[i] = userName[i + 1];
caiName[i] = caiName[i + 1];
caiCount[i] = caiCount[i + 1];
time[i] = time[i + 1];
address[i] = address[i + 1];
status[i] = status[i + 1];
allPrice[i] = allPrice[i + 1];
}
userName[index - 1] = null;
caiName[index - 1] = null;
caiCount[index - 1] = 0;
time[index - 1] = 0;
address[index - 1] = null;
status[index - 1] = false;
allPrice[index - 1] = 0.0;
index--;
break;
} else {
System.out.print("输入错误,请重新输入序号:");
}
}
System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
for (int i = 0; i < index; i++) {
System.out.println((i + 1) + "\t" + userName[i] + "\t"
+ caiName[i] + "\t\t" + caiCount[i] + "\t"
+ time[i] + "\t\t" + address[i] + "\t\t"
+ (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
+ "¥");
}
System.out.print("输入0返回(或者任意整数)");
sc.nextInt();
break;
// 我要点赞
case 5:
System.out.println("序号\t名称\t\t单价\t点赞数");
for (int i = 0; i < menusname.length; i++) {
System.out.println((i + 1) + "\t" + menusname[i] + "\t\t"
+ price[i] + "\t" + star[i]);
}
System.out.print("输入序号给菜品点赞");
while (true) {
int temp = sc.nextInt();
if (temp > 0 && temp <= 3) {
time[index] = temp;
star[temp - 1]++;
break;
} else {
System.out.print("输入错误,请重新输入序号:");
}
}
System.out.println("序号\t名称\t\t单价\t点赞数");
for (int i = 0; i < menusname.length; i++) {
System.out.println((i + 1) + "\t" + menusname[i] + "\t\t"
+ price[i] + "\t" + star[i]);
}
System.out.print("输入0返回(或者任意整数)");
sc.nextInt();
break;
// 退出系统
default:
System.out.println("谢谢使用,欢迎下次使用");
return;
}
}
}
}