java复习笔记day02

1.逻辑运算符:
&逻辑与、&&短路与、|逻辑或、||短路或、!逻辑非、^逻辑异或
2.从键盘获取不同类型的变量:
导包:import java.util.Scanner;
使用: Scanner input = new Scanner(System.in);//实例化对象
int a = input.nextInt();//使用

//输入测试
	Scanner scanner = new Scanner(System.in); 
	System.out.println("Input name please :");
	String name = scanner.next();
	System.out.println("name: "+name);
	
	System.out.println("Input age please :");
	int age = scanner.nextInt();
	System.out.println("name: "+age);
	
	System.out.println("Input weight please :");
	double name2 = scanner.nextDouble();
	System.out.println("name: "+name2);
	
	System.out.println("Input isMale please :");
	boolean isMale = scanner.nextBoolean();
	System.out.println("name: "+isMale);

3.选择逻辑说明:
如果多个条件表达式对应的范围是“互斥”关系,条件表达式谁上谁下都可以。
如果多个条件表达式对应的范围是“包含”关系,应该将范围小的写在范围大的前面。
4.switch 说明:
switch中的变量只能是如下的几个类型之一:byte short char int String(jdk 7.0 新增) 枚举类
5.从键盘输入中获取一个char:
Scanner input = new Scanner(System.in);
String str = input.next();
char c = str.charAt(0);
6.Eclipse 使用:
编码集:general-Workspace ,将:encoding改成UTF-8
修改字体:Genneral-colorandfont-basic
7.数组:
一维数组的内存解析:
数组名放在栈里面,数组元素放在堆里面一段连续的内存空间。赋值其实是对内容的一种覆盖。

public class Array {

	public static void main(String[] args) {
		//1.变量的声明
		int[] ids;
		//静态初始化:数组的赋值和数组元素的赋值同时进行。
		//变量的初始化
		ids = new int []{1,2,3,4,5,6,7}; 
		//声明和初始化
		int[] ids1 = new int[]{1,2,3,4,5,6,7};
		//动态初始化:数组的赋值和数组元素的赋值分开进行。
		String[] names = new String[3];
		//2.如何调用指定索引位置的数组元素:通过索引的方式。
		names[0] = "乔羽";
		names[1] = "金庸";
		names[2] = "琼瑶";
		//总结:不管是静态初始化还是动态初始化,一旦数组初始化完成,其长度就是确定的。
		
		//3.数组的长度,即为数组中元素的个数。可以使用length属性来获取。
		System.out.println(ids.length);
		System.out.println(names.length);
		//4.如何遍历数组
		for(int i = 0 ;i <ids.length;i++){
			System.out.println(ids1[i]);
		}
		//5.不同类型的数组元素的默认初始化
		//5.1整型:byte/short/int/long默认初始化值为:0
		int[] arr1 = new int[4];
		arr1[0] = 1;
		for(int i =0 ;i <arr1.length;i++){
			System.out.println(arr1[1]);
		}
		//5.2 浮点型:float、double默认初始化值为:00
		float[] arr2 =new float[5];
		System.out.println(arr2[0]);
		//5.3 布尔型:boolean 默认初始化值为:false
		boolean[] arr3 =new boolean[5];
		System.out.println(arr3[0]);
		//5.4 字符型:char默认初始化值为0或者'\u0000',不能理解为'0'
		char[] arr4 =new char[5];
		System.out.println("-----"+arr4[0]+"-----");
		//5.5引用数据类型的默认初始化值为:null,不能写为:"null"
		String[] arr5 = new String[5];
		System.out.println(arr5[2]);
		//6.一维数组的内存解析(理解)
		//7.体会数组的长度的不可变性。
		int [] arr6 = new int[]{1,2,3,4};	
	}

}

8.堆排序:
堆的定义:n个元素的序列{k0,k1,…,kn-1},当且仅当满足以下关系时,称之为堆:
ki <= k2i+1 且 ki <= k2i+2 称之为最小化堆。也称为小顶堆。
ki >= k2i 且 ki >= k2i+1 称之为最大化堆。 也称为大顶堆。
堆排序示例(以大顶堆为例)
1.建立初始堆(把放在数组里的元素的序列看成是一棵完全二叉树,对该二叉树进行调整,使之成为堆)
9.快速排序:
快速排序是迄今为止所有内排序算法中速度最快的一种。它的基本思想是:任取待排序序列中的某个元素作为标准(也称为支点、界点,一般取第一个元素),通过一次划分,将待排序元素分为左右两个序列,左子序列元素的排序码均小于基准元素的排序码,然后分别对两个子序列继续进行划分,直至每一个序列只有一个元素为止。最后得到的序列便是有序序列。

public class SortFast {
	public static void main(String[] args){	
		//快速排序测试
		int data[] = new int[]{0,5,3,3,8,65,8,9,6};
		quickSort(data);
		for(int i=0 ;i<data.length;i++)
			System.out.print(data[i]+" ");
	}
	/**
	 *  快速排序算法
	 * @param data
	 * @param start
	 * @param end
	 */
	private static void subSort(int[] data,int start,int end){
		if(start<end){
			int base = data[start];
			int i = start;
			int j = end+1;
			while(true){
				while(i<end &&data[++i] - base <= 0);
				while(j>start && data[--j] - base >=0);
				if(i<j){
					swap(data,i,j);
				}else{
					break;
				}
			}
			swap(data,start,j);
			subSort(data,start,j-1);
			subSort(data,j+1,end);
		}
	}
	/**
	 *  交换数据
	 * @param data 传入一个数组
	 * @param i 传入开始位置
	 * @param j 传入结束位置
	 */
	private static void swap(int[] data, int i, int j) {
		int temp = data[i];
		data[i] = data[j];
		data[j] = temp;
	}
	/**
	 * 快速排序
	 * @param data
	 */
	public static void quickSort(int[] data){
		subSort(data,0,data.length-1);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_30657195/article/details/82793574