java0401-0407 数组常见问题

一、0401
1.引用不存在的数组下标时,会出现outofbounds(越界错误。
2.如果取消数组的指向,那么会无法引用到数组元素,而且整个数组将丢失。
二、0402-数组的遍历

数组遍历常和for循环共同使用。数组类有一个叫做length的成员变量。

int[] arr = {1,6,5,7,4,8};

for(int x = 0; x < arr.length; x++){
S.O.P(arr[x]);
}

三、数组作为参数

public static vodi printA(int [] arr){
for(int x= 0; x< arr.length; x++)
{
S.O.P(arr[x]);
}
}

TIP:如果直接输出arr,打印出来的是内存地址。 [I@de6ced
中括号:数组 I:整形 @右边即为内存地址。这个地址由哈希算法算出。

四、一些常见算法
1.取最值
思路:定义第一个为大,有比之大者即替换。最小值类似。
package com.itheima;
//7、 编写程序接收键盘输入的5个数,装入一个数组,并找出其最大数和最小数。
import java.io.*;//导入io,util包以支持从键盘的输入
import java.util.*;

public class Test7 {
public static void main(String Args[]){
Scanner in = new Scanner(new BufferedInputStream(System.in));//声明scanner
int tmp[] = new int[5];
int big,small;
for(int i = 0; i < tmp.length; i++){
tmp[i] = in.nextInt();
}//获取输入
in.close();
big = tmp[0];
small = tmp[0];
for(int i = 0; i < tmp.length; i++){
if(big < tmp[i])
big = tmp[i];
if(small > tmp[i])
small = tmp[i];
}//进行比较
System.out.print("small:"+small+" "+"big:"+big);//输出
}
}

2.选择排序
思路:
从第一个开始,拿第一个跟后面的比,一旦遇到比第一个小的则互换位置。
public static void selectSort(int[] arr){
for (int x = 0; x
{
for(int y = x +1; y < arr.length; y++)
{
if(arr[x] > arr[y])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
3.冒泡排序
思路:相邻元素比较,符合条件则进行换位。每次出一个当前排列中的一个最值(到底是最大值还是最小值取决于比较方式)到队列尾端。参与比较的元素随着循环次数增多而逐渐减少。

public static void bubbleSort(int[] arr){
for(int x = 0; y < arr.length - 2; x ++){
for(int y = 0; y < arr.length - x - 1; y ++){
if(arr[y] > arr[y+1]){
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y +1] = temp;
}
}
}
}
在栈内存中进行运算,效率要高,
四、折半查找
任务目的:在一个数组中查找key值。
方法一:直接查找。缺点:效率太低。

方法二:折半查找。方法:假设有n个数字(已排序)。比较查找数据与最大数据之间的关系,如果最大值比查找值大,就将最小值设置为原查找范围的一半。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值