数组

数组:数组是存储同一种数据类型数据的集合容器。

数组的定义格式:

数据类型[]  变量名  =  new  数据类型[长度];

数组的好处:对分配到数组对象中每一个数据都分配一个编号(索引值、角标、下标),索引值的范围是从0开始,最大是:长度-1。

局部变量:如果一个变量是在一个方法(函数)的内部声明的,那么该变量就是一个局部变量。

成员变量:成员变量就是定义在方法之外,类之内的.

数组中最常见的问题:

1.NullPointerException 空指针异常原因:引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。

2.ArrayIndexOutOfBoundsException索引值越界。原因:访问了不存在的索引值。

数组的初始化方式:

动态初始化:
数据类型[] 变量名 = new 数据类型[长度]; 静态初始化:
数据类型[] 变量名 = {元素1,元素2.....};

如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化。如果数据一开始还不太明确,这时候就建议使用动态初始化。

class Demo7 {
public static void main(String[] args) {
//动态初始化
//int[] arr = new int[10]; //静态初始化
int[] arr = {10,20,30,40,50};
for(int index = 0 ; index<arr.length ; index++){
System.out.print(arr[index]+",");
}
/*
int[] arr = new int[50];
Scanner scanner = new Scanner(System.in);
for(int i = 0 ; i< arr.length ; i++){
arr[i] = scanner.nextInt();
}
*/
}
}
class Demo8 {
public static void main(String[] args)
{
int[] arr = {-12,-14,-5,-26,-4};
int max = getMax(arr);
System.out.println("最大值:"+ max);
} public static int getMax(int[] arr) {
int max = arr[0]; //用于记录最大值
for(int i = 1 ; i < arr.length ; i++){
if(arr[i]>max){ //如果发现有元素比max大,那么max变量就记录该元素。
max = arr[i];
}
}
return max;
}
}

选择排序(直接排序):使用一个元素与其他 的元素挨个比较一次,符合条件交换位置。

class Demo9 {
public static void main(String[] args) {
int[] arr = {12,5,17,8,9}; //对于5元素的数组,只需要找出4个最大值就可以排序了。
selectSort(arr);
} public static void selectSort(int[] arr) {
//把最大值放在首位置。
for(int j = 0; j<arr.length-1; j++){ // 控制的是轮数。
for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
if(arr[i]>arr[j]){
//交换位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//遍历数组,查看效果
System.out.print("目前的元素:");
for (int i = 0 ; i<arr.length ;i++){
System.out.print(arr[i]+",");
}
}
}

冒泡排序:冒泡排序的思想就是使用相邻的两个 元素挨个比较一次,符合条件交换位置。

class Demo10 {
public static void main(String[] args) {
int[] arr = {12,8,17,5,9}; // 最大的索引值: 4 容量:5
bubbleSort(arr);
} public static void bubbleSort(int[] arr){
// 把最大值放在最后一个位置
for(int j = 0 ; j<arr.length-1 ; j++){ //控制轮数
for(int i = 0 ; i<arr.length-1-j ; i++){ // 找出一个最大值
//相邻的元素比较
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
//遍历数组,查看效果
System.out.print("目前的元素:");
for (int i = 0 ; i<arr.length ;i++){
System.out.print(arr[i]+",");
} }
}

折半查找法(二分法): 使用前提必需是有序的数组。

class Demo12 {
public static void main(String[] args) {
int[] arr = {12,16,19,23,54};
//int index = searchEle(arr,23);
int index = halfSearch(arr,116);
System.out.println("元素所在的索引值是:"+ index);
}
public static int halfSearch(int[] arr, int target){
//定义三个变量分别记录最大、最小、中间的查找范围索引值
int max = arr.length-1;
int min = 0;
int mid = (max+min)/2;
while(true){
if(target>arr[mid]){
min = mid+1;
}else if(target<arr[mid]){
max = mid -1;
}else{
//找到了元素
return mid;
}
//没有找到的情况
if (max<min){
return -1;
}
//重新计算中间索引值
mid = (min+max)/2;
} } public static int searchEle(int[] arr, int target) {
for(int i = 0 ; i<arr.length ; i++){
if(arr[i]==target){
return i;
}
}
return -1;
}
}

二维数组: 二维数组就是数组中的数组。

二维数组的定义格式:

数据类型[][] 变量名 = new 数据类型[长度1][长度2];

二维数组 的初始化方式:

动态初始化:
数据类型[][] 变量名 = new 数据类型[长度1][长度2]; 静态初始化:
数据类型[][] 变量名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...} ..}
class Demo16 {
public static void main(String[] args) {
int[][] arr = {{10,11,9},{67,12},{33,35,39,40}};
//遍历二维数组
for(int i = 0; i <arr.length ; i++){
for(int j = 0 ; j<arr[i].length ; j++){
System.out.print(arr[i][j]+",");
}
//换行
System.out.println();
}
}
}

数组的特点:

1.数组只能存储同一种数据类型的数据。

2.数组是会给存储到数组中的元素分配一个索引值的,索引值从0开始,最大的索引值是length-1;

3.数组一旦初始化,长度固定。

4.数组中的元素与元素之间的内存地址是连续的。

java(数组及常用简单算法 )的更多相关文章

  1. Java数组的一些基本算法

    数组的一些算法问题:  排序:(升序)   选择排序:     求每一轮的最小值:再输出   冒泡排序:     相邻的两个数相比较,把两个数相比较,第一个大于好面的就交换位置   shell排序: ...

  2. java数组的常用函数

    import java.util.*; class 数组索引{ public static void main(String args[]){ //数组中的使用工具:Arrays int[] arr ...

  3. JAVA 数组的常用操作

    目录: 声明数组: 初始化数组: 查看数组长度: 遍历数组: int数组转成string数组: 从array中创建arraylist: 数组中是否包含某一个值: 将数组转成set集合: 将数组转成li ...

  4. java数组复制的简单方法(一)

    总结:主要是用a数组的长度等于b数组,然后a数组赋值给b数组,我不能想到这个办法,我还是不理解数组中length属性的含义 这里数组并没有正真复制过来,而是一个引用 package com.a; // ...

  5. 一些常ArcGIS常用简单算法 C#

    最近开始重构不顺眼的辣鸡代码,顺带将某个模块的一个算法辅助类贴到这里. /// <summary> /// 算法逻辑辅助类 /// </summary> internal st ...

  6. java数据结构之常用排序算法

    冒泡排序 private void maopao(int arr[]) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j &l ...

  7. Java数组的12个常用方法

    以下是12个关于Java数组最常用的方法,它们是stackoverflow得票最高的问题. 声明一个数组 String[] aArray = new String[5]; String[] bArra ...

  8. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  9. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

随机推荐

  1. LightOJ-1341 Aladdin and the Flying Carpet 分解质因数(注意对大素数的优化)

    题目链接:https://cn.vjudge.net/problem/LightOJ-1341 题意 给出一个长方形的面积a 让你算整数边长的可能取值,并且两个边都大于给定数字b 思路 唯一分解定理: ...

  2. 【习题 8-20 UVA-1620】Lazy Susan

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会发现,如果把连续4个数字进行一次翻转的话. 假设这连续的4个数字的逆序数为x; 那么翻转过后,逆序数就会变成6-x; (最多6个逆 ...

  3. UVA10269 Adventure of Super Mario(Floyd+DP)

    UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...

  4. 最简单的HTML5游戏——贪吃蛇

    <html> <head> <meta charset="UTF-8"/> <title>贪吃蛇</title> < ...

  5. Android旋转屏幕后国际化语言失效的解决的方法

    本文已同步至个人博客:liyuyu.cn 近期在项目中使用到了国际化多语言(英文+中文),但在使用时发现了一个问题.当屏幕旋转后.APP语言(中文)自己主动转换为了系统语言(英文).设置了Activi ...

  6. 从零開始怎么写android native service?

    从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...

  7. openVswitch(OVS)源码分析之工作流程(哈希桶结构体的解释)

    这篇blog是专门解决前篇openVswitch(OVS)源码分析之工作流程(哈希桶结构体的疑惑)中提到的哈希桶结构flex_array结构体成员变量含义的问题. 引用下前篇blog中分析讨论得到的f ...

  8. hdu 3547 DIY Cube (Ploya定理)

    DIY Cube Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total S ...

  9. URAL 1614. National Project “Trams” (图论大YY)

    1614. National Project "Trams" Time limit: 0.5 second Memory limit: 64 MB President has de ...

  10. 理解Linq查询

    using System; using System.Linq; static class Program { static double Square(double n) { Console.Wri ...