java背景
sun公司1995年高级编程语言
早期为oak 后改名
java之父詹姆斯 高斯林
2009年sun公司被oracle公司收购
javajdk安装
orcale官网
验证jdk版本
cls 清屏
dir 查看文件(ls linux)
cd进入文件
盘符
第一个java程序
1 javac编译
2 java运行
注意
1文件名后缀必须是java
2文件名称必须与代码类名一致
3必须使用英文符号
jdk11后java直接编译跳过javac
JDK的组成
1 JVM虚拟机运行java的地方
2 核心类库java自己写好的程序给程序员调用
3 JRE java的运行环境
4 JDK java开发工具包
java跨平台
一次编译 处处可用
环境变量配置
1 path java高版本自动配置可以在cmd中任意位置启动
2 JAVA_HOME 手动配置
小技巧 path %JAVA_HOMR%\bin
注释
单行注释(ctrl+/)
多行注释(ctrl+shift+s/)
字面量
1 整数
2 小数
3 字符 ’ A’单引号 只能放一个
4 字符串 “sdadad” 双引号
5 布尔值 true false
6 空值 null
java运算
能算则算不能算就连一起
int i =1
int j = i++ j=1 i=2
int j =++i j=2 i=2
运算符
键盘录入案例
使用java.util.Scanner;包
调用Scanner sc= new Scanner(system.in);
方法一int age=sc.nextInt() 接受int类型
方法二String name= sc.next()接受字符串类型
if条件
swtich语句
注意事项
1不支持参数为long float double
2 不允许重复case值 且不能为变量
3不要忘记加break
穿透性去掉break简化代码冗余
循环结构
1 for循环 控制代码反复运行很多次
2 while循环
知道循环几次用for 不知道用whlie
3 do-while
死循环
淘宝用
经典
Break和continue
Random随机数案例
1导入Random包
2创建Random对象
3使用nextint(bound)方法调用随机选择0-x的数不包含x
public static void main(String[] args) {
// 1导包
// 2创建随机数对象
Random r=new Random();
for (int i=0;i<20;i++) {
// 不包含边界值10
int data = r.nextInt(10);
System.out.println(data);
}
遇到1-10先减到0后加回去
猜数字游戏案例
public static void main(String[] args) {
Random r=new Random();
Scanner sc=new Scanner(System.in);
// 1-100转化成(0-99)+1
int data=r.nextInt(100)+1;
// 提示用户输入数据
System.out.println("请输入你猜的数字");
// 创建死循环
while(true) {
// 接受用户数据
int Gdata=sc.nextInt();
// 判断数据范围
if(Gdata>data) {
System.out.println("猜大了");
}else if (Gdata<data)
{
System.out.println("猜小了");
}else {
System.out.println("恭喜你猜对了");
break;
}
}
}
数组
用来存储同一批相同类型数据的内存空间
例子
20,10,5,4,6,7;
int[] arr={20,10,5,4,6,7};
牛尾,设,梯子;
String[] names={牛尾,设,梯子};
1数组的定义
(1)静态(定义直接给数据)
double[] score=new double[]{99.5,55.6,77.4,66.4};
int[] age=new int[]{5,6,7,8,8};
// 简化写法
int[] ages={5,6,7,8,8};
String[] names={"牛尾","设","梯子"};
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/10b88b1a11a9401b9ceab60979719b40.png)
数组访问
int[] age=new int[]{5,6,7,8,8};
System.out.println(age[2]);
age[3]=100;
System.out.println(age[3]);
System.out.println(age.length);长度
最大索引[ ]等于length-1
(2)动态
int [] age=new int[3] 默认值[0,0,0,0]
double[] score=new double[6];
// 赋值
score[1]=5.5;
System.out.println(score[1]);
System.out.println(score[3]);
数组遍历
int arr[]=new int[]{1,2,3,4,5,6,7,8,9};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
随机排序
import java.util.Random;
import java.util.Scanner;
public class RandonSortDemo {
public static void main(String[] args) {
定义动态数组
int[] codes=new int[5];
定义用户输入
Scanner sc=new Scanner(System.in);
循环写入数据
for (int i = 0; i < codes.length; i++) {
System.out.println("请输入第" + (i + 1) + "员工的工号");
int code=sc.nextInt();
codes[i]=code;
}
定义随机数,在数组中交换随机数索引
Random r=new Random();
for (int i = 0; i < codes.length; i++) {
// 设置随机数范围为数组长度
int s=r.nextInt(codes.length);
int temp;
temp=codes[s];
codes[s]=codes[i];
codes[i]=temp;
}
for (int i = 0; i < codes.length; i++) {
System.out.println(codes[i]);
}
}
}
int s = r.nextInt(10);定义一次函数会生成一个随机数放在循环多次调用可以实现生成循环次数随机数
数组排序
冒泡排序
每次找到最大值放到数组后面
确定排序几轮:数组长度-1
次数:数组长度-i
public static void main(String[] args) {
int[] arr=new int[]{4,3,2,1};
// 一共进行长度减一轮
for (int i = 1; i <=arr.length-1; i++) {
// 每次比较轮数-i
for (int j = 0; j < arr.length-i; j++) {
if(arr[j]>arr[j+1]){
int temp;
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
for (int i = 0; i <arr.length; i++) {
System.out.println(arr[i]);
}
}
}
java内存分配
栈 地址指向堆
堆 数据
方法区 main
方法
多次重复使用一段代码
提高代码复用率
逻辑更清晰
方法定义
方法定义与调用
public static void main(String[] args) {
int s=add(5,8);
System.out.println(s);
}
public static int add(int a,int b){
int sum;
sum=a+b;
return sum;
}
案例
public static void main(String[] args) {
int result=add(10);
System.out.println(result);
}
public static int add(int n) {
int sum=0;
for (int i = 1; i <=n; i++) {
sum+=i;
}
return sum;
}
输出结果不需要返回参数直接输出调用即可
public static void main(String[] args) {
judgment(6);
judgment(5);
}
public static void judgment(int a) {
if(a%2==0){
System.out.println(a + "是偶数");
}
else{
System.out.println(a + "是奇数");
}
}
返回数组最大值方法
public static void main(String[] args) {
int[] facescore=new int[]{15,900,10000,20000,9500,-5};
int s=max(facescore);
System.out.println(s);
}
public static int max(int[] a) {
int max1=a[0];
for (int i = 0; i < a.length; i++) {
if(a[i]>max1)
{
max1=a[i];
}
}
return max1;
}
方法调用内存图
基本参数传递在方法中调用修改参数值不影响外面的参数值
引用类型参数传递在方法调用中修改地址所在参数调用时会影响外面参数值
方法案例
打印任意整型数组内容
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6};
int[] arr1=null;
printArray(arr);
printArray(arr1);
}
public static void printArray(int[] a) {
System.out.print("[");
if(a!=null&&a.length>0){
for (int i = 0; i < a.length; i++) {
System.out.print(i == a.length - 1 ? a[i] : a[i] + ",");
}
}
System.out.print("]");
}
查找数组索引方法
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6};
int[] arr1=null;
printArray(arr);
printArray(arr1);
}
public static void printArray(int[] a) {
System.out.print("[");
if(a!=null&&a.length>0){
for (int i = 0; i < a.length; i++) {
System.out.print(i == a.length - 1 ? a[i] : a[i] + ",");
}
}
System.out.print("]");
}
比较数组是否相同方法
public static void main(String[] args) {
int[] a={1,2,3,4};
int[] b={1,2,3};
Boolean result=searchSame(a,b);
System.out.println(result);
}
public static Boolean searchSame(int [] a,int[] b) {
if(a.length==b.length){
for (int i = 0; i < a.length; i++) {
if(a[i]!=b[i]){
return false;
}
}
return true;
}
return false;
}
方法重载
专题课
1 买机票
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您购买机票的价格");
Double price = sc.nextDouble();
System.out.println("请输入您购买机票的月份");
int month = sc.nextInt();
System.out.println("请输入您购买机舱的类型");
String type = sc.next();
System.out.println("您机票的最终价格为" + DiscountPrice(price, month, type));
}
public static Double DiscountPrice(Double Price, int Month, String Type) {
Double money;
if (Month >= 5 & Month <= 10) {
switch (Type) {
case "头等舱":
money = Price * 0.9;
break;
case "经济舱":
money = Price * 0.85;
default:
System.out.println("您输入的舱型有误");
money = -1.0;
}
} else if (Month == 11 || Month == 12 || Month >= 1 & Month <= 4) {
switch (Type) {
case "头等舱":
money = Price * 0.7;
break;
case "经济舱":
money = Price * 0.65;
default:
System.out.println("您输入的舱型有误");
money = -1.0;
}
} else {
System.out.println("您输入的月份有误");
money = -1.0;
}
return money;
}
2 找素数
public static void main(String[] args) {
int temp=0;
for (int i = 101; i <201; i++) {
boolean flag=true;
for (int j = 2; j <i/2 ; j++) {
if(i%j==0){
flag=false;
break;
}
}
if(flag){
temp++;
System.out.print(i+"\t");
}
}
System.out.println();
System.out.println("一共有" + temp + "个素数");
}
3开发验证码
public static void main(String[] args) {
String result=randomcode(5);
System.out.println(result);
}
public static String randomcode(int n)
{
String code="";
Random r=new Random();
for (int i = 0; i <n; i++) {
int type=r.nextInt(3);
// 1:小写字母,2:大写字母,3:数字
switch (type){
case 0:
// 小写字母的ascll码范围97-122
char ch=(char) (r.nextInt(26)+97);
code+=ch;
break;
case 1:
// 大写字母65-90
char ch1=(char) (r.nextInt(26)+65);
code+=ch1;
break;
case 2:
code+=r.nextInt(10);
break;
}
}
return code;
}
4
public static void main(String[] args) {
int[] arr1={1,2,3,4};
int[] arr2=new int[arr1.length];
copy(arr1,arr2);
// arr2=arr1;
// 不是数组复制只是单纯指向同一个地址
}
public static void printAarry(int[] a) {
System.out.print("[");
if(a!=null&&a.length>0) {
for (int i = 0; i < a.length; i++) {
System.out.print(i == a.length - 1 ? a[i] : a[i] + ",");
}
}
System.out.println("]");
}
public static void copy(int[] a,int[] b) {
for (int i = 0; i < a.length; i++) {
b[i]=a[i];
}
printAarry(a);
printAarry(b);
}
public static void main(String[] args) {
int[] score=new int[6];
Scanner sc=new Scanner(System.in);
for (int i = 0; i < score.length; i++) {
System.out.println("请第"+(i+1)+"个评委输入打分(0-100)");
score[i]=sc.nextInt();
}
System.out.println("选手最终得分");
System.out.println(avscore(score));
}
public static double avscore(int[] a) {
int max=a[1];
int min=a[1];
int sum=0;
for (int i = 0; i < a.length; i++) {
if(max<a[i]){
max=a[i];
}
if(min>a[i]) {
min = a[i];
}
sum+=a[i];
}
return (double) (sum-max-min)/(a.length-2);
}
6数字加密
6双色球案例
public static void main(String[] args) {
int[] luckynumber=creatluckyNumber();
printAarry(luckynumber);
int[] usernumber=userNumber();
printAarry(usernumber);
judge(luckynumber,usernumber);
}
// 生成数据
public static int[] creatluckyNumber() {
int[] numbers=new int[7];
Random r=new Random();
for (int i = 0; i < numbers.length-1; i++) {
while (true)
{
int data=r.nextInt(33)+1;
// 标记数据正确
boolean flag=true;
for (int j = 0; j < i; j++) {
// 当数字重复跳出比较重新来随机值
if(numbers[j]==data){
flag=false;
break;
}
}
if(flag){
numbers[i]=data;
break;
}
}
}
numbers [6]=r.nextInt(16)+1;
return numbers;
}
// 用户选择号码
public static int[] userNumber() {
int[] number=new int[7];
Scanner sc=new Scanner(System.in);
for (int i = 0; i < number.length-1; i++) {
System.out.println("请选择红色球第" + (i +1)+ "个号码(1-33,要求不重复");
number[i]=sc.nextInt();
}
System.out.println("请选择蓝色球号码(1-16)要求不重复");
number[6]=sc.nextInt();
return number;
}
public static void printAarry(int[] a) {
System.out.print("[");
if(a!=null&&a.length>0) {
for (int i = 0; i < a.length; i++) {
System.out.print(i == a.length - 1 ? a[i] : a[i] + ",");
}
}
System.out.println("]");
}
// 比较数组
public static void judge(int[] luckynumber,int[] usernumber) {
int redHit=0;
int blueHit=0;
for (int i = 0; i < luckynumber.length; i++) {
if(luckynumber[i]==usernumber[i]){
redHit++;
}
}
if(luckynumber[6]==usernumber[6]){
blueHit++;
}
switch (redHit){
case 0:
if(blueHit==1){
System.out.println("恭喜您中了六等奖");
}else{
System.out.println("不好意思未中奖");
}
break;
case 1:
if(blueHit==1){
System.out.println("恭喜您中了六等奖");
}else{
System.out.println("不好意思未中奖");
}
break;
case 2:
if(blueHit==1){
System.out.println("恭喜您中了五等奖");
}else{
System.out.println("不好意思未中奖");
}
break;
case 3:
if(blueHit==1){
System.out.println("恭喜您中了五等奖");
}else{
System.out.println("不好意思未中奖");
}
break;
case 4:
if(blueHit==1){
System.out.println("恭喜您中了四等奖");
}else{
System.out.println("恭喜您中了五等奖");
}
break;
case 5:
System.out.println("恭喜您中了三等奖");
break;
case 6:
if(blueHit==1){
System.out.println("恭喜您中了一等奖");
}else{
System.out.println("恭喜您中了二等奖");
}
break;
}
}