这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)
一、数组:
1.数组的定义
<1>数组的定义和静态初始化
(1)int[] arr = new int[2];
(2)int[] arr = new int[]{3,1,6,5,4};
int[] arr = {3,1,6}
<2>常见问题:
ArrayIndexoutofBoundsException:访问数组中不存在的角标
NullPointerException:空指针异常
2.数组常见操作之遍历
<1>循环遍历数组
for(int i=0;x<arr.length;x++)
{
System.out.println("arr["+x+"]="+arr[x]+ ";");
}
打印数组的元素的函数:
public static void printArray(int[] arr)
{
for(int x=0;x<arr.length;x++){
if(x!=arr.length-1)
System.out.print(arr[x] ",");
else
System.out.println(arr[x]);
}
}
*注:直接打印数组的引用[I@debced
[:表示数组
I:表示int
@:表示指向
debced:哈希函数生成的值,表示数组在内存中的地址
3.数组常见操作之获取最值
需求:获取一个数组中的最小值和最大值
public static int max,min;
public static void main(String[] args)
{
int[] array = new int[]{8,3,7,23,76,21,3,4,56};
System.out.print("数组为:[");
for(int x=0;x<arr.length;x++){
if(x!=arr.length-1)
System.out.print(arr[x] ",");
else
System.out.println(arr[x]);
}
getM(array);
System.out.println("max = " max " min = " min);
}
获取最值的函数
public static void getM(int[] array)
{
max=min=array[0];
for(int i=1;i<array.length;i++)
{
if(max<array[i])
max=array[i];
if(min>array[i])
min=array[i];
}
}
4.数组排序:选择排序
需求:数组之选择排序。
思路:
1、选择排序方法,数组中的第一个值与其他值比较,将最小值与第一个值进行交换。
2、然后第二个数与后面的值比较 .....直到结束。
选择排序函数:
public static void selectSort(int[] array)
{
for(int i=0;i<array.length-1;i++){
for(int j=i+1;j<array.length;j++) {
if(array[i]>array[j])
change(array,i,j);
}
}
}
5.数组排序:冒泡排序
思路:冒泡排序的基本方法
1、相邻两个元素n,n 1进行比较,如果前一个元素大于后一个元素,交换两个数。
否则,继续比较之后的数n 1,n2;
2、每次比较之后,最值出现在数组之后,下次循环需要取消对数组已出现的最值的比较。
public static void bubbleSort(int[] arr)
{
for(int i=arr.length-1;i>0;i--)
{
for(int j=0;j<i;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
6、插入排序:
思路:一个无序的数组,我们认为它的第0项是有序的,然后我们从它之后的数据中选出一项,插入到前面的有序数据中,直到数组都有序为止;
实现:
public static void insertSort1(int[] array){
for(int i=0;i<array.length-1;i++){
int pre = i;
int temp = array[i+1];
while(pre >=0 && temp<array[pre]){
array[pre+1] = array[pre];
pre--;
}
array[pre+1] = temp;
}
}
7、数组排序:位置置换,功能抽取
public static void change(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
8、数组查找:折半查找
需求:对有序的数组进行折半查找
思路:折半查找数组,如果数值存在,返回角标,不存在,返回-1;
public static int halfserach(int[] arr, int x)
{
int half,high,low;
low = 0;
high = arr.length-1;
half = (high+low)>>1;
while(arr[half] != x)
{
if(arr[half]<x)
low = half + 1;
else if(arr[half]>x)
high = half - 1;
if(high>=low)
return -1;
half = (high+low)>>1;
}
return half;
}
二、 进制转换
1.十进制转换二进制
public static int bin(int x)
{
StringBuffer strb = new StringBuffer();
while(num>0)
{
strb.append(num%2);
}
System.out.println(strb.reverse());
}
2.十进制转换为十六进制
方法一:
需求:十进制转换为二进制,并打印输出
public static void toBin(int num)
{
StringBuffer strb = new StringBuffer();
while(num>0)
{
strb.append(num%2);
num = num>>1;
}
System.out.println(strb.reverse());
}
3.数组查表法(十进制转换为十六进制)
方法二:
需求:十进制转换为十六进制,查表法
public static void toBin02(int num)
{
StringBuffer strb = new StringBuffer();
for(int i=0;i<8;i++)
{
int temp = num&15;
if(temp>9)
strb.append((char)(temp-10+'A'));
else
strb.append(temp);
num=num>>>4;
}
System.out.println(strb.reverse());
}
4.进制转换函数的优化
需求:实现十进制向二进制、八进制、十六进制转换
需求:十进制转换为二进制
public static void toBin(int num)
{
trans(num,1,1);
}
需求:十进制转换为八进制
public static void toBa(int num)
{
trans(num,7,3);
}
需求:十进制转换为十六进制
public static void toHax(int num)
{
trans(num,15,4);
}
需求:进制转换函数
public static void trans(int num,int base,int offset)
{
if(num==0)
{
System.out.println(0);
return;
}
char[] chs ={'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[] arr = new char[32];
int point = arr.length;
while(num!=0)
{
int temp = num & base;
arr[--point] = chs[temp];
num = num >>> offset;
}
for(int i=point;i<arr.length;i++)
{
System.out.print(arr[i]);
}
System.out.println();
}
6.数组之二维数组
<1>原理:二维数组的元素是一维数组
<2>定义方式:
int[][] i = new int[2][3];
int[][] arr1 = {{1,2,3},{4,5,6},{7,8,9}};
不规则数组:
int[][] arr2 = new int[3][];
arr2[0] = new int[2];
arr2[1] = new int[3];
arr2[2] = new int[5];