黑马程序员--编程基础VI--
来源:互联网 发布:软件看门狗 编辑:程序博客网 时间:2024/05/20 00:12
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! ----------
数组:
(1)一维数组:
格式1:int[] arr = new int[5];
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
左边:
int: 元素类型
[]: 数组的意思
arr:数组名
右边:
new: 创建的意思, 创建一个实体:
实体:存放很多内容的东西
int: 数组中的元素的数据类型
[]: 数组
5: 数组中元素的个数 或者 数组的长度
格式2:int[] arr = new int[]{1,3,5,7};
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
格式3:int[] arr = {2,4,6,8};
元素类型[] 数组名 = {元素,元素,……};
java的内存划分:
A:栈内存
B:堆内存
C:方法区:
D:本地方法区:与系统相关的资源,我们java调用不了的
E:寄存器: 与CPU相关的资源
定义数组的常见错误:
正确的:
int[] arr = new int[3];
int[] arr2 = new int[]{1,2,3};
int[] arr3 = {1,2,3};
int[] arr4;
arr4 = new int[3];
错误的:
int[] arr5 = new int[];
int[] arr6 = new int[3]{1,2,3};
int[] arr7;
arr7 = {1,2,3};
数组操作常见问题:
A:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
数组角标越绝异常:当访问的元素, 超过了最大角标的时候
B:Exception in thread "main" java.lang.NullPointerException
空指针异常: 当实体为垃圾后, 再访问实体中的数据,就会发生该异常
代码体现:
class ArrayDemo{
public static void main(String[] args) {
int[] arr = new int[3];
//角标越界
System.out.println(arr[3]);
arr = null;
//空指针异常
System.out.println(arr[0]);
}
}
// 遍历数组:
代码体现:
class ArrayDemo2{
public static void main(String[] args) {
//给一个数组
int[] arr = {65,13,78,54,89,95};
//调用
printArray(arr);
}
public static void printArray(int[] arr) {
//打印一个前括号
System.out.print("[");
//依次得到每个元素
for (int x=0; x<arr.length; x++) {
//判断
if (x == arr.length-1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x]+",");
}
}
//打印后括号
System.out.println("]");
}
}
Java中的参数传递:
A:参数传递的时候,如果传递的是 基本数据类型,形参的改变 对 实参没有影响
B: 如果传递的是 引用数据类型(地址,其实地址值,也是数值), 形参的改变 堆 实参有 影响
在java的参数传递中 使用的方式是, 值传递, 还是 址传递 ?
java中 只用 值传递
获取最大值的案例:
class ArrayDemo3{
public static void main(String[] args) {
int[] arr = {12,23,45,13,65};
//获取元素最大值
int max = getMax(arr);
System.out.println("max=" + max);
}
public static int getMax(int[] arr) {
//定义一个参照物
int max = arr[0];
for (int x=1; x<arr.length; x++) {
//判断
if (arr[x] > max) {
max = arr[x];
}
}
//返回最大值
return max;
}
}
排序:
public class ArrayDemo4 {
public static void main(String[] args) {
int [] arr={13,46,27,67,21,17};
printArray(arr);
selectSort(arr);
bubbleSort(arr);
printArray(arr);
}
/ *选择排序:从0索引位置,依次和后面的元素进行比较。
第一次结束后,最小值出现在了0索引位置。*/
public static void selectSort(int [] arr){
for(int x=0;x<arr.length-1;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;
}
}
}
}
//冒泡排序:相邻元素两两比较,大的后放。
public static void bubbleSort(int [] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-1-x;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1 ];
arr[y+1]=temp;
}
}
}
}
//遍历数组
public static void printArray(int [] arr){
System.out.print("[");
for(int x = 0; x<arr.length;x++){
if(x==arr.length-1){
System.out.print(arr[x]);
}else{
System.out.print(arr[x]+",");
}
}
System.out.println("]");
}
}
查找:
代码体现:
class ArrayDemo5{
public static void main(String[] args) {
int[] arr = new int[]{1,3,9,5,7};
System.out.println("查询9在数组中的位置" + getIndex(arr, 9) );
System.out.println("查询3在数组中的位置" + getIndex(arr, 3) );
System.out.println("查询-3在数组中的位置" + getIndex(arr, -3) );
int[] arr2 = new int[]{11,23,34,45,56,67,78};
System.out.println("67在数组中的位置:"+ halfSearch(arr2, 67) );
System.out.println("23在数组中的位置:"+ halfSearch(arr2, 23) );
System.out.println("-23在数组中的位置:"+ halfSearch(arr2, -23) );
System.out.println("90在数组中的位置:"+ halfSearch(arr2, 90) );
}
/*
二分查找
返回类型: int
未知内容: int[] arr, int value
*/
public static int halfSearch(int[] arr, int value) {
//定义3个变量 min, mid, max
int min = 0;
int max = arr.length -1;
int mid = (min + max)/2;
while (value != arr[mid]) {
//判断
if (value > arr[mid]) {
//在右侧
min = mid + 1;
} else {
//在左边
max = mid -1;
}
//更新 mid
mid = (min + max)/2;
//当最小角标 大于 最大角标时, 证明 数据没有查询到
if (min > max) {
mid = -1;
break;
}
}
return mid;
}
/*
普通查找
明确:
返回类型:int
未知内容:int[] arr, int value
如果 查询到数值, 返回 数值对应的角标值
没有查询到, -1 代表 没有查到
*/
public static int getIndex (int[] arr, int value) {
int index = -1;
//通过循环得到元素 依次比较,如果比较成功,返回角标值
for (int x=0; x<arr.length; x++) {
//判断
if (arr[x] == value) {
index = x;
}
}
return index;
}
}
(2)二维数组:
格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为75写法是:arr[0][1] = 75;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组
二维数组中的有三个一维数组
每一个一维数组中具体元素也都已初始化
第一个一维数组 arr[0] = {3,8,2};
第二个一维数组 arr[1] = {2,7};
第三个一维数组 arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
代码体现:
class Array2Demo {
public static void main(String[] args) {
int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
printArray(arr);
int sum = getArraySum(arr);
System.out.println("sum="+ sum);
}
/*
数组元素的值 和
返回类型:int
未知内容:int[][] arr
*/
public static int getArraySum( int[][] arr) {
//创建一个变量 存放累加和
int sum = 0;
//获取每一个元素
for (int x=0; x<arr.length; x++) {
for (int y=0; y<arr[x].length; y++) {
// 元素依次相加到 累加和变量中
sum += arr[x][y];
}
}
return sum;
}
/*遍历 二维数组
返回类型: void
未知内容:int[][] arr*/
public static void printArray (int[][] arr) {
for (int x=0; x<arr.length; x++) {
for (int y=0; y<arr[x].length; y++) {
System.out.print(arr[x][y] +" ");
}
System.out.println();
}
}
}
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! ----------
详细请查看:http://edu.csdn.net
- 黑马程序员--编程基础VI--
- 黑马程序员_java编程基础
- 黑马程序员_C#编程基础
- 黑马程序员_C#编程基础
- 黑马程序员-dom编程基础
- 黑马程序员_编程基础
- 黑马程序员_java编程基础
- 黑马程序员-基础-网络编程
- 黑马程序员基础-----网络编程
- 黑马程序员-基础-网络编程
- 黑马程序员--C#编程基础
- 黑马程序员-----C#编程基础
- 黑马程序员_C#编程基础
- 黑马程序员_01Java编程基础
- 黑马程序员-网络编程基础
- 黑马程序员-----java编程基础
- 黑马程序员----Java编程基础
- 黑马程序员-Java编程基础
- 局域网
- C语言之多维数组简单题目练习
- Python 笔记
- 子查询有OR无法展开,改写成union
- 【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别
- 黑马程序员--编程基础VI--
- 引用数据类型的传递
- Extjs中为combo动态的添加“全部”或“”查询项
- 黑马程序员_Java Mail实现邮件发送
- 冒泡排序
- Java中的异常处理机制的简单原理和应用
- 由编程珠玑字符串倒置问题拓展到split之C\C++实现
- 相册
- Mysql的常用数据类型以及用途总结