package cn.temptation;

 import java.util.Scanner;

 public class Sample01 {
public static void main(String[] args) {
// 需求:定义一个数组存储星期一、星期二、...星期日,打印该数组形式为[星期一, 星期二, ...星期日],根据用户输入的数字(1~7),显示是星期几? // 写法一、考虑使用字符串类型的数组
// // 1、创建一个数组来存储星期一、星期二、...星期日
// String[] weekDayArr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
// printArray(weekDayArr);
//
// // 2、接收键盘录入
// System.out.println("输入一个数字就可以找到对应是星期几:");
// Scanner input = new Scanner(System.in);
// int weekDay = input.nextInt();
// input.close();
//
// // 3、判断输入的数字和数组中某个元素的索引之间的关系
// if (weekDay >= 1 && weekDay <= 7) {
// System.out.println("选择的是:" + weekDayArr[weekDay - 1]);
// } else {
// System.out.println("输入的数字不在范围内!");
// } // 写法二、考虑使用int类型的数组
// 1、创建一个数组来存储星期一、星期二、...星期日
int[] weekDayArr = { 1, 2, 3, 4, 5, 6, 7 };
printArray(weekDayArr); // 2、接收键盘录入
System.out.println("输入一个数字就可以找到对应是星期几:");
Scanner input = new Scanner(System.in);
int weekDay = input.nextInt();
input.close(); // 3、判断输入的数字和数组中某个元素的索引之间的关系
if (weekDay >= 1 && weekDay <= 7) {
System.out.println("选择的是:" + convertNumberToString(weekDayArr[weekDay - 1]));
} else {
System.out.println("输入的数字不在范围内!");
}
} /**
* 打印数组
* @param arr:字符串数组
*/
public static void printArray(String[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
} /**
* 打印数组(重载方法)
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
} /**
* 数字转换为星期字符串的方法
* @param i:数字
* @return:星期字符串
*/
public static String convertNumberToString(int i) {
String result = ""; switch (i) {
case 1:
result = "星期一";
break;
case 2:
result = "星期二";
break;
case 3:
result = "星期三";
break;
case 4:
result = "星期四";
break;
case 5:
result = "星期五";
break;
case 6:
result = "星期六";
break;
case 7:
result = "星期日";
break;
default:
result = "输入错误!";
break;
} return result;
}
}
 package cn.temptation;

 public class Sample02 {
public static void main(String[] args) {
// 需求:给定一个int类型的数组,实现如下功能:将数组反转,比如:{1, 2, 3} -----> {3, 2, 1}, {1, 2, 3, 4} -----> {4, 3, 2, 1} // 思路:
// 1、可能有两种情况,一种数组的长度为奇数,一种数组的长度为偶数
// 2、如果长度为奇数,中间那个元素不动,第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
// 中间那个元素的前一个元素和中间那个元素的后一个元素对调
// 3、如果长度为偶数,第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
// 中间位置的前一个元素和中间位置的后一个元素对调 int[] arr1 = { 1, 2, 3 };
System.out.println("反转前的数组:");
printArray(arr1); // 调用方法
// reversalArray1(arr1);
reversalArray2(arr1); System.out.println("反转后的数组:");
printArray(arr1); System.out.println("------------------------------"); int[] arr2 = { 1, 2, 3, 4 };
System.out.println("反转前的数组:");
printArray(arr2); // reversalArray2(arr2);
reversalArray1(arr2); System.out.println("反转后的数组:");
printArray(arr2); // 注意:
// 1、代码写完后,自己再考虑一下,不要抱着糊完任务的心态
// 2、思考问题的时候是区分了数组为奇数长度和偶数长度的,在编写代码时,发现对于奇数长度,因为其中间元素不参与反转,相当于反转时把中间元素拿掉
// 即其操作次数:(数组长度 - 1) / 2, 和 偶数长度数组的操作次数是一致的
} /**
* 打印数组
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
} /**
* 奇数长度的数组反转(因为后续的显示操作也是使用堆内存中的内容,所以该方法使用void:无返回即可)
* @param arr
*/
public static void reversalArray1(int[] arr) {
// 下面写法逻辑错误,这样会对调两次,等于没有对调
// for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
for (int i = 0, j = arr.length - 1; i < arr.length / 2; i++, j--) {
// 对调:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
// 中间那个元素的前一个元素和中间那个元素的后一个元素对调
// 定义临时变量接收
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
} /**
* 偶数长度的数组反转(因为后续的显示操作也是使用堆内存中的内容,所以该方法使用void:无返回即可)
* @param arr
*/
public static void reversalArray2(int[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
// 对调:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,...,
// 中间位置的前一个元素和中间位置的后一个元素对调
// 定义临时变量接收
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
}
}
 package cn.temptation;

 public class Sample03 {
public static void main(String[] args) {
int[] arr = { 10, 20, 30 };
System.out.println(arr); // [I@15db9742
System.out.println(arr[0]); // arr = null; // 产生异常:java.lang.NullPointerException 空指针异常
// 有警告:Null pointer access: The variable arr can only be null at this location
// System.out.println(arr[0]); // 产生异常:java.lang.NullPointerException 空指针异常
// 有警告:Null pointer access: The variable arr can only be null at this location
// System.out.println(arr.length); // 下句语句执行时无异常
System.out.println(arr); // null // 注意:
// 1、设置引用类型变量的值为null,其实就是让其栈中声明的引用类型变量 与 在堆中开辟的空间之间的联系断开
// 2、堆中原来开辟的空间并不会立即消失 // null是一个特殊值,类比boolean类型的特殊值true 和 false
// null表示的是引用数据类型的空值,引用数据类型的默认值是null // 如下两种写法意义相同
// int[] arrExtend;
// int[] arrExtend = null; // null不能用于给基本数据类型(值类型)赋值,null只能用于引用数据类型
// 语法错误:Type mismatch: cannot convert from null to int
// int i = null;
}
}
 package cn.temptation;

 public class Sample04 {
public static void main(String[] args) {
// int[] arr = { 1, 2, 3 };
// printArray(arr); // 匿名数组:没有显示定义数组名的数组
// 这里匿名数组使用new关键字直接在内存的堆中开辟元素个数长度的空间,并存储这些元素,然后作为实参传递给方法的形参供方法使用 // printArray(new int[] { 1, 2, 3 }); // 匿名数组的优点:直接new出来使用,不用再做声明
// 匿名数组的缺点:只能使用一次(因为没有声明数组变量,一次使用完毕后就找不到了) // 注意:匿名数组定义时,不能使用静态初始化的简写形式,语法出错
// 语法错误:Syntax error on token "printArray", @ expected before this token
// printArray({ 4, 5, 6 }); // 注意:匿名数组定义时,可以使用动态初始化的形式,但是这样定义后,无法进行元素的填充
printArray(new int[3]);
} /**
* 打印数组
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
}
}
 package cn.temptation;

 public class Sample05 {
public static void main(String[] args) {
// 给方法传递值类型参数 和 给方法传递引用数据类型参数 int i = 1;
System.out.println(i); // 1 // 调用方法
show(i); // System.out.println(i); // System.out.println("------------------------------"); int[] arr = { 1, 2, 3 };
printArray(arr); // [1,2,3] // 调用方法
show(arr); // [3,4,5] printArray(arr); // [3,4,5]
} // 方法接收的是值类型的参数
// i为形参,它接受show方法调用时传递过来的实参
// show方法中使用的i叫做局部变量,声明该局部变量的地方是形参定义的地方,也是它的作用域开始的地方,作用域结束的地方是show方法右侧的大括号
public static void show(int i) {
i += 2;
System.out.println("方法内的参数值为:" + i);
} // 方法接收的是引用类型的参数
// 传递引用类型的参数,其实传递的是堆内存中开辟的空间的地址(也就是所谓的把引用传递了过去)
public static void show(int[] arr) {
// 遍历数组
for (int i = 0; i < arr.length; i++) {
arr[i] += 2;
} // 打印数组
printArray(arr);
} /**
* 打印数组
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
}
}
 package cn.temptation;

 public class Sample06 {
public static void main(String[] args) {
// 可变长参数:Java中当作数组处理
// 可变长参数一般出现在方法的形参中 // 调用方法
show(1, new double[] { 2, 3, 4 }); double[] arr = { 5, 6, 7 };
show(9, arr);
} // 正确形式使用可变长参数
public static void show(int i, double... ds) {
System.out.println(i); // System.out.println(ds); // [D@15db9742
System.out.println(ds.length); // 3 // 遍历
for (double item : ds) {
System.out.println(item);
}
} // 注意:一个方法只能有一个可变长参数,且必须位于参数列表的最后位置 // 语法错误:The variable argument type double of the method test must be the last parameter
// public static void test(int i, double... ds, char... ch) {
// // 想创建多个可变长参数的方法
// } // 语法错误:The variable argument type double of the method test must be the last parameter
// public static void test(int i, double... ds, boolean flag) {
// // 想创建可变长参数不在最后位置的方法
// }
}
 package cn.temptation;

 public class Sample07 {
public static void main(String[] args) {
// 排序 // 冒泡排序(两两位置比较,每轮最大数字出现在右侧,依次向左)
// 思路:
// 1、第一轮,比较第1个位置和第2个位置上的数,将较小的数放在第1个位置上,较大的数放在第2个位置上
// 比较第2个位置和第3个位置上的数,将较小的数放在第2个位置上,较大的数放在第3个位置上
// 以此类推直到第一轮结束(最后一个位置不用参与比较,因为它的右侧没有位置了),最大的数字在最右侧
// 2、第二轮,还是比较第1个位置和第2个位置上的数,将较小的数放在第1个位置上,较大的数放在第2个位置上
// 比较第2个位置和第3个位置上的数,将较小的数放在第2个位置上,较大的数放在第3个位置上
// 以此类推直到第二轮结束(倒数第二个位置不用参与比较,因为它的右侧已经是最大的数了),第二大的数字在倒数第二个
// 3、后续的轮以此类推 int[] arr = { 2, 1, 0, 4, 3 }; System.out.println("排序前:");
printArray(arr); // 冒泡排序算法
for (int i = 0; i < arr.length - 1; i++) { // 外层循环的轮数是数组长度 - 1,i表示的是当前为第几轮
for (int j = 0; j < arr.length - 1 - i; j++) { // j表示的当前轮中的位置
// 相邻的两个位置上的数做比较
if (arr[j] > arr[j + 1]) {
// 对调
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
} // 可以使用打印数组的方法查看当轮排序结果
printArray(arr);
} System.out.println("排序后:");
printArray(arr);
} /**
* 打印数组
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
}
}
 package cn.temptation;

 public class Sample08 {
public static void main(String[] args) {
// 排序 // 选择排序
// 思路:
// 1、第一轮,把在第一个位置上的元素依次和后续位置上的元素进行比较,如果被比较的元素比第一个位置上的元素小,就对调,直到比较到最后一个位置上的元素
// 第一轮操作完成后,在第一个位置上得到最小的那个元素
// 2、第二轮,把在第二个位置上的元素依次和后续位置上的元素进行比较,如果被比较的元素比第二个位置上的元素小,就对调,直到比较到最后一个位置上的元素
// 第二轮操作完成后,在第二个位置上得到次小的那个元素
// 3、以此类推 int[] arr = { 2, 1, 0, 4, 3 }; System.out.println("排序前:");
printArray(arr); // 选择排序算法
for (int i = 0; i < arr.length - 1; i++) { // 外层循环的i既表示轮数,又表示比较的位置
// 第一轮,把在第一个位置上的元素依次和后续位置上的元素进行比较,如果被比较的元素比第一个位置上的元素小,就对调,直到比较到最后一个位置上的元素
// if (arr[0] > arr[1]) {
// // 对调
// int temp = arr[0];
// arr[0] = arr[1];
// arr[1] = temp;
// }
// if (arr[0] > arr[2]) {
// // 对调
// int temp = arr[0];
// arr[0] = arr[2];
// arr[2] = temp;
// } // 归纳上述语句,可以得到规律
for (int j = i + 1; j < arr.length; j++) { // 内层循环的j表示其他被比较的位置
if (arr[i] > arr[j]) {
// 对调
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
} // 可以使用打印数组的方法查看当轮排序结果
printArray(arr);
} System.out.println("排序后:");
printArray(arr);
} /**
* 打印数组
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
}
}
 package cn.temptation;

 public class Sample09 {
public static void main(String[] args) {
// 排序 // 插入排序
// 思路:
// 1、第一轮,从第2个位置开始,和其左侧的紧靠着它的位置的数(第1个位置上的数)进行比较,小的数放前面,大的数放后面
// 2、第二轮,从第3个位置开始,和其左侧的紧靠着它的位置的数(第2个位置上的数)进行比较,小的数放前面,大的数放后面
// 再看第2个位置,和其左侧的紧靠着它的位置的数(第1个位置上的数)进行比较,小的数放前面,大的数放后面
// 3、第三轮,从第4个位置开始,和其左侧的紧靠着它的位置的数(第3个位置上的数)进行比较,小的数放前面,大的数放后面
// 再看第3个位置,和其左侧的紧靠着它的位置的数(第2个位置上的数)进行比较,小的数放前面,大的数放后面
// 再看第2个位置,和其左侧的紧靠着它的位置的数(第1个位置上的数)进行比较,小的数放前面,大的数放后面
// 4、以此类推 int[] arr = { 2, 1, 0, 4, 3 }; System.out.println("排序前:");
printArray(arr); // 插入排序算法
for (int i = 1; i < arr.length; i++) { // 外层循环的i既表示轮数,又表示位置
// // 第一轮操作
// if (arr[0] > arr[1]) {
// // 对调
// int temp = arr[0];
// arr[0] = arr[1];
// arr[1] = temp;
// }
//
// // 第二轮操作
// if (arr[1] > arr[2]) {
// // 对调
// int temp = arr[1];
// arr[1] = arr[2];
// arr[2] = temp;
// }
// if (arr[0] > arr[1]) {
// // 对调
// int temp = arr[0];
// arr[0] = arr[1];
// arr[1] = temp;
// } // 归纳上述操作,得到规律
// 写法一
for (int j = i; j > 0; j--) { // 内层循环的j表示当前的这个位置
if (arr[j] < arr[j - 1]) { // // 内层循环的当前的这个位置上的数 和 其左侧紧靠着它的位置上的数进行比较
// 对调
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
} // 写法二
// for (int j = 0; j < i; j++) { // 内层循环的j表示从第1个位置开始配合进行比较
// if (arr[j] > arr[i]) {
// // 对调
// int temp = arr[i];
// arr[i] = arr[j];
// arr[j] = temp;
// }
// }
} System.out.println("排序后:");
printArray(arr);
} /**
* 打印数组
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
}
}
 package cn.temptation;

 import java.util.Arrays;

 public class Sample10 {
public static void main(String[] args) {
// 初始化数组
int[] arr = { 2, 1, 0, 4, 3 }; System.out.println("排序前:");
printArray(arr); // 可以调用Arrays类的sort方法进行排序
// 类 Arrays:此类包含用来操作数组(比如排序和搜索)的各种方法。
// 常用的成员方法:
// static void sort(int[] a) :对指定的 int 型数组按数字升序进行排序。
Arrays.sort(arr); System.out.println("排序后:");
printArray(arr);
} /**
* 打印数组
* @param arr:int数组
*/
public static void printArray(int[] arr) {
System.out.print("["); // 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
} // 换行
System.out.println();
}
}

【原】Java学习笔记011 - 数组的更多相关文章

  1. 【原】Java学习笔记012 - 数组

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:小店对自己的 ...

  2. 【原】Java学习笔记010 - 数组

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:一堆分数,要 ...

  3. Java学习笔记七——数组工具类Arrays

    数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组.若将里面的方法用熟的话,那开发效率会大大提高.下面介绍其中的方法. List<T> ...

  4. java学习笔记六——数组

    数组类型 数组是一种常见的数据结构,可用于存放多个数据,每一个数组元素存放一个数据,通常可以通过下标进行访问其元素. Java数组要求所有数组元素具有相同的数据类型.因此,数组元素的数据类型是唯一的. ...

  5. Java学习笔记day04_数组

    1.switch case switch语句中表达式的数据类型是有要求的: JDK 1.0 ~ 1.4 , 数据类型接受byte, short, int, char JDK 1.5 , 数据类型接受b ...

  6. 1.14(java学习笔记)数组

    假如我们需要用到1000个相同类型的数据,肯定不可能创建1000个变量, 这样既不方便,也不直观,也不便于我们使用.这时就需要用到数组. 一.数组的声明与使用 public class Array { ...

  7. Java学习笔记 03 数组

    一.数组的创建和使用 数组的创建和使用 >>创建方法1:先声明,再用new关键字分配内存(使用new关键字分配内存,整形数组中各个元素的初始值都为0) String str[]; str= ...

  8. Java学习笔记之——数组

    一.一维数组 1. 什么是数组 变量:在内存中开辟了一块空间 数组:在内存中开辟了一块连续的空间,每块空间保存的值/对象叫做元素,每个元素都有对应的下标.(下标从0开始) 2. 初始化一个数组 1)不 ...

  9. java学习笔记之数组

随机推荐

  1. tensorflow 1.0 学习:用别人训练好的模型来进行图像分类

    谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类. 下载地址:https://storage.googleapis.com/down ...

  2. laravel的消息队列剖析

    laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...

  3. java代码之美(4)---guava之Immutable(不可变)集合

    Immutable(不可变)集合 一.概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开.Collections是jdk提供的一个工具类 ...

  4. ASP.NET Core WebApi AspNetCoreRateLimit 限流中间件学习

    AspNetCoreRateLimit介绍: AspNetCoreRateLimit是ASP.NET核心速率限制框架,能够对WebApi,Mvc中控制限流,AspNetCoreRateLimit包包含 ...

  5. asp.net core 系列 15 中间件

    一.概述 中间件(也叫中间件组件)是一种装配到应用管道以处理请求和响应的软件. 每个组件:(1)选择是否将请求传递到管道中的下一个组件;(2)可以在管道中的下一个组件之前和之后执行工作. 请求委托用于 ...

  6. Android--Tween补间动画

    前言 Android除了支持逐帧动画之外,也提供了对补间动画的支持,补间动画就是指开发人员只需要指定动画的开始.动画结束的"关键帧",而动画变化的"中间帧"由系 ...

  7. MTU MSS PDU SDU

    首先要说两个概念: PDU:协议数据单元,计算机网络各层对等实体间交换的单位叫做PDU,不同层的PDU名称不同 层 名称 应用层 数据 传输层 段 segment 网络层 数据包 package 链路 ...

  8. iOS 循环引用讲解(中)

    谈到循环引用,可能是delegate为啥非得用weak修饰,可能是block为啥要被特殊对待,你也可能仅仅想到了一个weakSelf,因为它能解决99%的关于循环引用的事情.下面我以个人的理解谈谈循环 ...

  9. WPF 窗口大小自适应

    在设置桌面不同分辨率以及较大DPI下,窗口如何显示的问题. 方案一 设置窗口最大值和最小值显示 通过对比当前屏幕的可显示区域,将窗口高宽最大值和最小值,设置为窗口的实际高宽(此例中仅设置高度) 界面设 ...

  10. 重写(override)和重载(overload)的区别

    override(重写): 是进行基类中函数的重写,是面向对象的概念 重载(overload):是方法的名称相同,参数或参数类型不同,进行多次重载以适应不同的需要.overload 是面向对象的概念.