使用类模板对数组元素进行查找求和。_advancedday05APIM,S,O,Os,BD,Arrays,包装类,二分查找及冒泡排序...

Math类

Math类可以用来做一些基本的数学运算,它提供的方法都是静态方法,使用时直接用类名调用。

public static int abs(int b)    求一个数的绝对值public static double floor(double a)      向下取整  3.4 --> 3.0public static double ceil(double a)    向上取整  3.9 --> 4.0public static int max(int a, int b)      求两个数的最大值public static int min(int a, int b)      求两个数的最小值public static double pow(double a, double b)      求a的b次幂public static long round(double a)     对一个小数进行四舍五入public static double random()      生成随机数,在范围[0,1)内的一个小数

System类

public static void exit(int n)    退出虚拟机public static long currentTimeMillis()    获取当前系统时间的毫秒值    毫秒值:距离1970年1月1日到现在的毫秒值public static void arraycopy(    Object src, int srcPos, Object dest, int destPos, int length)    参数解释:        src - 源数组。        srcPos - 源数组中的起始位置。        dest - 目标数组。        destPos - 目标数据中的起始位置。        length - 要复制的数组元素的数量。  

Object类

Object类是所有类的父类,它的方法任何一个类都可以直接调用。

public String toString()    把一个对象转换为字符串(格式:全类名+"@"+地址值)    建议:子类重写toString()方法,返回对象的属性值    public boolean equals(Object obj)    比较两个对象是否“相等”        子类没有复写equals方法:比较的是地址值,等价于"=="        子类复写了equals方法: 比较的是属性值       注意:在API中有一些类,本身就复写了toString和equals方法

Objects类

Objects是JDK7之后才有的工具类,可以用来判断对象是否为null等操

public static String toString(Object obj)    把一个对象转换为字符串; //等价于 String str=obj.toString();    public static String toString(Object obj,String defStr)    把一个对象转换为字符串;如果对象为null,返回默认的字符串                         //等价于                          String str;                         if(obj!=null){                            str=obj.toString();                         }else{                            str=defStr;                         }      public static boolean isNull(Object obj)     判断对象是否为null;  //等价于 obj==nullpublic static boolean notNull(Object obj)     判断对象不为null    //等价于 obj!=null

BigDecimal类

BigDecimal可以对数据进行精确的运算,需要用它提供的方法对数据进行运算。

public BigDecimal add(BigDecimal augend)      加法运算public BigDecimal subtract(BigDecimal subtrahend)      减法运算public BigDecimal multiply(BigDecimal multiplicand)      乘法运算public BigDecimal divide(BigDecimal divisor)      除法运算    public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)     除法运算,可以保留指定的小数位    参数解释:        BigDecimal divisor:参与运算的除数        int scale:保留的位数        int roundingMode: 舍入模式            BigDecimal.ROUND_UP: 进一法             BigDecimal.ROUND_Floor: 去尾法            BigDecimal.ROUND_HALF_UP: 四舍五入          
  • 演示四则运算:参与要运算的数据,都需要封装尾BigDecimal对象

int[] array = {10, 130, 40, 50};//使用BigDecimal对数组中的元素求和BigDecimal sum = new BigDecimal("0");for (int i = 0; i < array.length; i++) {    //sum = sum+ array[i];    sum = sum.add(new BigDecimal(array[i] + ""));}System.out.println(sum);
  • 演示保留小数

BigDecimal a = new BigDecimal("10");BigDecimal b = new BigDecimal("10");//计算a/b的结果,保留2位小数,四舍五入BigDecimal c=a.divide(b,2,BigDecimal.ROUND_HALF_UP);System.out.println(c);

Arrays类

Arrays是用来对数组进行操作的工具类,它提供了查找,排序等操作

public static int binarySearch(int[] a, int key)     使用二分查找法对查找数组中的元素;如果没有找到,返回一个负数public static void sort(int[] a)     对元素进行排序public static String toString(int[] a)      把数组按照固定格式拼接成字符串 [元素1,元素2,....]
int[] array={3,4,1,2,9,5,7,8,6};
//对数组进行排序
Arrays.sort(array);
//打印输出数组中的元素
System.out.println(Arrays.toString(array));
//查找5元素出现的索引
int index = Arrays.binarySearch(array, 5);
System.out.println(index);

基本数据类型包装类

在Java语言中每一种基本数据类型都有一个包装类与之对应
基本类型 引用类型(包装类)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
学习包装类,主要学生基本类型数据、包装类、字符串之间的转换。

获取Integer对象

Integer in1 = Integer.valueOf("123"); //只能是纯数字的字符串
Integer in2 = Integer.valueOf(123);
Double d1=Double.valueOf(3.14);
Double d2=Double.valueOf("3.14");
...其他的包装类,都可以调用valueOf方法获取包装类对象

自动装箱和自动拆箱

1.自动装箱:基本数据类型-->包装类
2.自动拆箱:包装类对象 --> 基本数据类型
//手动装箱
Integer in1 = Integer.valueOf(10); //把整数10转换为Integer对象
//自动装箱
Integer in2 = 10;
//手动拆箱
int a = in1.intValue(); //把Integer对照转换为int
//自动拆箱
int b = in2;
...其他基本类型和包装类之间也可以自动装箱和自动拆箱

任意类型和String之间的转换

任意基本类型和字符串之间也可以进行转换
1)其他类型转字符串可以使用
String s=String.valueOf(任意类型的数据)
2)字符串转其他的基本数据类型,找包装类的parseXxx方法
//1.把123转换"123"
String s = String.valueOf(123);
//2.把"123"转换123
int i = Integer.parseInt(s);
//3. 把"6.88"转换6.88
double v = Double.parseDouble("6.88");
//4. 把6.88转换为"6.88"
String s1 = String.valueOf(v);
//5. 把3.14F转换为"3.14"
String s2 = String.valueOf(3.14F);
//6. 把"3.14"转换为3.14F
float v1 = Float.parseFloat(s2);
//规律:需要转换为什么类型,就找目标类型的包装类parseXxx方法
// 需要转换为字符串,就直接调用字符串valueOf方法

int和String转换练习

String str="13 67 89 76 56 89";
//切割字符串
String[] array=str.split(" ");
//定义一个int数组
int[] newArr=new int[array.length];
//把String[]中的元素转换为整数int
for(int i=0;i //array[i]转换为int
int num=Integer.parseInt(array[i]);
newArr[i]=num;
}
//求int数组的最大值,和求...

数组高级操作

二分查找

二分查找要求数组的元素必须要是从小到大的顺序,否则做不了二分查找

思路:
1.定义开始索引和结束索引
int start=0;
int end=array.length-1;
2.计算中间的索引
int mid=(start+end)/2;
3.让中间元素和目标元素进行比较
如果:array[mid]>key,end=mid-1
如果:array[mid] 如果:array[mid]==key,mid就是最终的结果
如果所有的元素都没有相等,就没有找到,返回-1
public class ArrayDemo1 {
public static void main(String[] args) {
int[] array = {11, 22, 33, 44, 55, 66, 77};
int index = binarySerarch(array, 99);
System.out.println(index);
}
//二分查找数组中元素出现的索引
//int[] array:数组
// int key: 要查找的目标元素
public static int binarySerarch(int[] array, int key) {
//1.定义开始索引和结束索引
int start = 0;
int end = array.length - 1;
while (start <= end) {
//2.计算中间的索引
int mid = (start + end) / 2;
//3.让中间元素和目标元素进行比较
if (array[mid] > key) {
//如果:array[mid]>key,end=mid-1
end = mid - 1;
} else if (array[mid] < key) {
//如果:array[mid] < key,start = mid + 1
start = mid + 1;
} else if (array[mid] == key) {
// 如果:array[mid] == key,mid就是最终的结果
return mid;
}
}
//前面条件都不成立,说明没有这个元素,返回-1
return -1;
}
}

冒泡排序

思路分析:	
1.从头开始把相邻的两个元素进行比较,把大的往后放,小的往前放
2.输出的长度如果为length,比较轮数length-1
3.每轮比较的次数依次递减

70e406a7458b27001c90b811a90dc8ca.png

public class ArrayDemo2 {
public static void main(String[] args) {
int[] array = {3, 4, 1, 8, 5, 6, 7, 2};
//排序前打印
printArray(array);
//排序
sort(array);
//排序后打印
printArray(array);
}
//使用冒泡排序对int[]进行排序
public static void sort(int[] array) {
//数组的长度为length,比较的轮数length-1
for (int i = 0; i < array.length - 1; i++) {
//每一轮比较的次数比上一轮少一次
for (int j = 0; j < array.length - 1 - i; j++) {
//把相邻的两个元素进行比较,小的往前放
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println(); //换行
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值