尚硅谷Java基础笔记day00-day07

day00 计算机基础

三分看,七分练

day01 Java入门

Java语言的特点

1.面向对象
(两个基本概念:类、对象三大特性:封装、继承、多态)
2.健壮性
(去掉了诸如指针、内存的申请与释放等,提供了一个相对安全的内存管理和访问机制)
3.跨平台性Write once,Run Anywhere
(JVM,Java Virtual Machine)

JDK,JRE,JVM三者之间的关系

  • JRE=JVM+Java SE标准类库
  • JDK=JRE+开发工具集

文档注释

/**
文档注释
@author wow808
@version v1.0
文档注释修饰的类通常为public
使用的命令为
javadoc -d myDirectory -author -version myJava.java
*/

day02 标识符和变量

标识符的命名规则

(不遵守则编译不通过)

  • 英文大小写字母,0-9,_或$组成
  • 数字不可以开头
  • 不可以使用关键字和保留字,但可以包含
  • 严格区分大小写,长度无限制
  • 不能包含空格

标识符的命名规范

  • 包名:多单词组成的所有字母小写:xxxyyyzzz
  • 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
  • 变量名、方法名:多单词组成时,第一个单词字母小写,第二个单词开始首字母大写:xxxYyyZzz
  • 常量名:所有字母都大写。多单词时用下划线连接:XXX_YYY_ZZZ

变量的分类

变量的分类

8种基本数据类型

基本数据类型

  • 整形 byte\short\int\long
  • 浮点型 float\double
  • 字符型 char
  • 布尔型 boolean

引用数据类型

  • 类(class)
  • 接口(interface)
  • 数组(array)

自动类型提升

小转大(表示范围)
byte\char\short>int>long>float>double
当byte、char、short三种结果做运算时,结果为int

强制类型转换(自动类型的提升的逆运算,截断)

整型常量默认int,浮点型常量默认为double

/*无法得到你想要的效果*/
System.out.println('*'+'\t'+'*');
System.out.println('*'+'\t'+'*');

Day03 运算符

算术运算符

++,–,+=等不会改变数据类型

位运算符

在一定范围内,x<<n,相当于

x*2^n

如何高效的计算

2*8

即2<<3

Day04 分支结构

Scanner

对于char型的获取,Scanner并没有提供相关的方法,只能获取一个字符串

随机数

如何获取一个随机数:10-99

double value = Math.random();//[0.0,1.0)
int value1 = (int)Math.random()*90+10;//[10.0,100.0)
/*
Math.random()*(99-10+1)+10
自己根据范围摸索规矩
公式:[a,b]:(int)(Math.random()*(b-a+1))+a
*/

switch case

一旦case满足条件,在遇到break之前,程序均会依次向下执行。
例:

class SwitchCaseTest{
    public static void main(String[] args){
        int number = 1;
        switch(number){
            case 0:
                System.out.println("zero");
                //break;
            case 1:
                System.out.println("one");
                //break;
            case 2:
                System.out.println("two");
                //break;
            case 3:
                System.out.println("three");
                //break;
            /*
            输出结果为:
            one
            two
            three
            */
        }
    }
}

default可放置在任意位置,但是最后执行。注意要加break;
switch结构中的表达式,只能是6种类型:
byte/short/int/char/枚举类型(jdk5.0)/String(jdk7.0)

错误: 编码GBK的不可映射字符

问题原因:
WINDOWS和PowerShell的默认编码为GBK,而VSCode、Notepad++等编辑器的默认编码为UTF-8
解决方法:
1.改变系统默认编码为UTF-8
2.将编辑器编码格式改为GBK
3.用javac -encoding UTF-8编译(推荐)

例题 用switchcase解决0-100内分数是否及格的问题

switch(score/60)
case 0:
    System.out.println("不及格");
    break;
case 1:
    System.out.println("及格");
    break;

例题 用switchcase解决,输入2019年的month和day,输出这是2019年的第n天

/*
编写程序,从键盘上输入2019年的month和day,程序输出
输入的日期为2019年的第几天
*/
import java.util.Scanner;
public class SwitchCaseTest2{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.println("Please enter month:");
		int month = scan.nextInt();
		System.out.println("Please enter day:");
		int day = scan.nextInt();
		System.out.println(month+","+day);
		int num = 0;
		switch(month){
			case 12:
				num+=30;
			case 11:
				num+=31;
			case 10:
				num+=30;
			case 9:
				num+=31;
			case 8:
				num+=31;
			case 7:
				num+=30;
			case 6:
				num+=31;
			case 5:
				num+=30;
			case 4:
				num+=31;
			case 3:
				num+=28;
			case 2:
				num+=31;
			case 1:
			    num+=day;
			    break;
		}
		System.out.println("这是2019年的第"+num+"天");
	}
}
/*
这道题考查了1.switchcase中break的妙用2.注意每个月份是加前一个月份的全天数
*/

switch-case执行效率稍高,但均可转换为if-else

Day05 循环结构

输出一定范围内的质数

/*
输出某个范围内的所有质数,并查看耗时
*/
public class PrimeTest{
	public static void main(String[] args){
		long start = System.currentTimeMillis();
		boolean isFlag = true;
		for(int i=2;i<100000;i++){
			isFlag = true;
			//优化二,针对质数的优化
			for(int j=2;j<=Math.sqrt(i);j++){
				if(i%j==0){
					isFlag = false;
					//优化一,发现因子后第一时间break
					break;
				}
			}
			if(isFlag){
				System.out.println(i);
			}
		}
		long end = System.currentTimeMillis();
		System.out.println(end-start);
	}
}
/*不用isFlag,利用continue
public class PrimeTest{
	public static void main(String[] args){
		long start = System.currentTimeMillis();
		for(int i=2;i<100000;i++){
			for(int j=2;j<=Math.sqrt(i);j++){
				if(i%j==0){
					continue;
				}
			}
				System.out.println(i);
		}
		long end = System.currentTimeMillis();
		System.out.println(end-start);
	}
}
*/

Day06-07 数组

注意

  • 数组是引用数据类型,数组的元素可以是任意类型
  • 数组的长度一旦确定,不再更改

二维数组元素默认初始化值

public class ArrayTest{
    public static void main(String[] args){
        int[][] arr = new int[4][3];
        //地址值中几个"["代表是几维数组,I代表元素的数据类型为Int
        System.out.println(arr[0]);//[I@15db9742
        System.out.println(arr[0][0]);//0
        System.out.println(arr);//[[I@6d06d69c
        
        //特殊情况,动态初始化时内层个数不设置,则外层元素无地址值,为null
        double [][] arr1 = new double[4][];
        System.out.println(arr1[1]);//null
    }
}

数组中涉及的常见算法

  • 数组元素的赋值:杨辉三角、回形数等(多考察)
  • 求数值数组中元素的最大值、最小值、平均数、总和等
  • 数组的复制、反转、查找(多考察)(线性查找、二分查找)
  • 数组元素的排序(多考察)

杨辉三角形

import java.util.Scanner;

public class YangHuiTest {
	public static void main(String[] args) {
		System.out.println("想打印几行杨辉三角?");
		Scanner scan = new Scanner(System.in);
		int line = scan.nextInt();
		//动态初始化杨辉三角,注意如果声明为new int[line][line]则是在浪费空间
		int[][] yangHui = new int[line][];
		//遍历赋值
		for(int i=0;i<yangHui.length;i++) {
			yangHui[i] = new int [i+1];
			//首尾元素赋值
			yangHui[i][0]=yangHui[i][i]=1;
			//给每行元素赋值,注意j从1(每行第二数开始)
			for(int j=1;j<i;j++) {
				yangHui[i][j] = yangHui[i-1][j-1]+yangHui[i-1][j];
			}
		}
		//遍历输出
		for(int i=0;i<yangHui.length;i++) {
			for(int j=0;j<=i;j++) {
				System.out.print(yangHui[i][j]);
			}
			System.out.println();
		}
	}
	
}

笔试题

创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值,同时要求元素的值各不相同

package fun.wow808.java;
/*
 * 创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,
 * 且是随机赋值,同时要求元素的值各不相同
 * */
public class RandomTest{
	public static void main(String[] args) {
		int[] arr = new int[6];
		for(int i=0;i<arr.length;i++) {
			int num = (int)(Math.random()*30+1);
			boolean isFlag = true; 
			while(true) {
				for(int j=0;j<arr.length;j++) {
					if(num == arr[i]) {
						isFlag = false;
						break;
					}
				}
				if(isFlag) {
					arr[i] = num;
					break;
				}
				num = (int)(Math.random()*30+1);
			}
		}
		
		//遍历
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
	}
}

公式获得[A,B]闭区间内的随机数

用(int)(Math.random()*(B-A+1)+A)

冒泡排序必须掌握

public class BubbleSortTest {
	public static void main(String[] args) {
		int[] arr = new int[] {1,8,12,3,5,9,10,34,0};
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr.length-1;j++) {
				if(arr[j]>arr[j+1]) {
					int swap = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = swap;
				}
			}
		}
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+"\t");
		}
	}
}

java.util.Arrays,操作数组的工具类

数组中的常见异常

    int[][] arr2 = new int[4][];
    System.out.println(arr[2]);//null
    System.out.println(arr[2][0]);//NullPointerException
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值