一、练习
- 假如一个小球从100米高度自由落下,每次落地后就反跳回原高度的一半。那么求它在第10次落地时,共经过多少米?第10次反弹多高?
public static void main(String[] args) {
System.out.println("一共经过了" + GG(10));
}
public static String GG(int n) {
double height1 = 100;
double sum = 0;
double heightSum = 0;
double height2 = 0;
for (int i = 1; i <= n; i++) {
height2 = height1 / 2.;
sum = height1 + height2;
height1 = height1 / 2.;
heightSum += sum;
}
return "一共经过了" + (heightSum - height2) + ",第10次反弹了" + height2 + "米";
}
- 十进制转8进制和16进制
public static void main(String[] args) {
System.out.println(method(7692));
}
public static String method(int n) {
String ss = "";
while (true) {
int n2 = n % 16;
String n3 = "";
n /= 16;
if (n2 == 10) {
n3 = "a";
} else if (n2 == 11) {
n3 = "b";
} else if (n2 == 12) {
n3 = "c";
} else if (n2 == 13) {
n3 = "d";
} else if (n2 == 14) {
n3 = "e";
} else if (n2 == 15) {
n3 = "f";
} else {
n3 = "" + n2;
}
System.out.println(n + "----" + n3);
ss = n3 + ss;
if (n == 0)
break;
}
return ss;
}
二、数组
数组的定义
- 声明并开辟数组
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
初始化操作
arr[0]=10;
- 静态初始化数组
- 数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希 望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
数组元素的默认初始值
- 数组元素是整型:0
- 数组元素是浮点型:0.0
- 数组元素是char型:0或’\u0000‘,而非’0‘
- 数组元素是boolean类型:false,Oracle的JVM中采用byte[]方式进行存储
数组的特点
- 数组是有序排列的
- 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
- 创建数组对象会在内存中开辟一整块连续的空间
- 数组的长度一旦确定,就不能更改。
数组常见异常
-
NullPointerException 空指针异常
- 原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
-
ArrayIndexOutOfBoundsException 索引值越界
- 原因:访问了不存在的索引值。数组角标越界异常:,注意:数组的角标从0开始。
-
将50放入{ 12, 14, 23, 25, 45, 66, 68, 70, 77, 90, 91 }进行排序
练习
int[] old = { 12, 14, 23, 25, 45, 66, 68, 70, 77, 90, 91 };
int kk = 50;
boolean bb = true;
int[] newArray = new int[old.length + 1];
for (int i = 0; i < old.length; i++) {
if (old[i] < kk) {
newArray[i] = old[i];
} else {
if (bb) {
newArray[i] = kk;
bb = false;
}
newArray[i + 1] = old[i];
}
}
for (int i : newArray) {
System.out.print(i + " ");
}
- 定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边
int[] arr = new int[] { 1, 2, 7, 10, 13 };
int[] brr = new int[arr.length];
int k = 0;
int m = arr.length - 1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
brr[k] = arr[i];
k++;
} else {
brr[m] = arr[i];
m--;
}
}
for (int i = 0; i < brr.length; i++)
System.out.print(brr[i] + "\t");
- 冒泡排序
double arr[] = { 12.5, 51.1, 23.1, 46.5, 95.1, 1.5 };
for (int j = 1; j < arr.length; j++) {
for (int i = 0; i < arr.length - j; i++) {
if (arr[i] > arr[i + 1]) {
double tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
}
}
}
for (double d : arr) {
System.out.print(d + " ");
}
- 折半查找
int[] arr = new int[21];
for (int i = 1; i < arr.length; i++) {
int r = (int) (Math.random() * 100);
arr[i] = r;
}
arr[0] = 33;
for (int i = 1; i < arr.length; i++) {
for (int k = 0; k < arr.length - i; k++) {
if (arr[k] > arr[k + 1]) {
int tmp = arr[k];
arr[k] = arr[k + 1];
arr[k + 1] = tmp;
}
}
}
for (int tmp : arr)
System.out.print(tmp + " ");
System.out.println();
int target = 33;
int pos = -1;
int m1 = 0;
int m2 = arr.length - 1;
boolean flag = false;
while (m1 <= m2) {
pos = (m1 + m2) / 2;
if (arr[pos] > target) {
m2 = pos - 1;
} else if (arr[pos] < target) {
m1 = pos + 1;
} else {
flag = true;
break;
}
}
if (flag)
System.out.println(pos + "::" + arr[pos]);
else
System.out.println("找不到");
三、System.currentTimeMillis()计算方法与时间转换
System.currentTimeMillis();