2017.11.27T19_8
ackage com.xdf;
import java.util.Scanner;
public class ArrayDemo01 {
/**
* 数组:
* 01.在内存中存储一组相同数据类型的集合!
* 02.数组会在内存中开辟一串连续的空间来保存数据!
* 03.数组的长度一旦被定义,不能被改变
* 04.数组的下标最大值=数组的长度-1
*
* 数组中相关概念:
* 01.定义数组
* int [] nums1; 声明了一个数组 ======》 nums1===》 火车厢 (只能存int类型的数据)
* nums1=new int[5];在内存中开辟了5个空间 =====》 火车厢 中有5个座位
* nums1[0]=50; 给数组中的第一个位置赋值 =====》 火车厢中的第一个座位有人了
* 因为数组是int类型,那么其他的四个空间位置默认值是0!
* 02.数组的基本要素
*
* 标识符: nums1(车厢1) ,数组的名称,用去区别不同的数组!
* int num=5;
* num==》变量名 我们通过变量名能直接拿到5这个数组!
* int [] nums1;
* 我们通过nums1只能拿到这个数组整体(车厢)!
* 之后通过 ‘下标’ 获取具体的‘数组元素’!
* 数组元素: 数组中真实存放的数据!
* 元素下标: 对数组元素进行的编号,编号从0开始!
* 元素类型: int 数组中每个元素的数据类型 (必须相同)
*
* 需求:
* 01.获取5名学生的java成绩
* 02.打印出5名学生的java成绩
*
*
* 分析:
* 01.循环使用for 来获取 5名学生的java成绩
* 02.怎么保存 5名学生的java成绩
* 03.难道我们创建5个变量吗? 数组
* 04.之后打印====》从数组中依次获取所有数据
* 从集合中获取所有的数据 =====》遍历
*
*/
public static void main(String[] args) {
// 声明一个存储学生成绩的数组
double[] scores = new double[5];
Scanner input = new Scanner(System.in);
// scores.length 数组的长度 ==》5
for (int i = 0; i < scores.length; i++) {
System.out.println("请您输入第" + (i + 1) + "名同学的java成绩:");
scores[i] = input.nextDouble(); // 循环获取学生成绩
}
System.out.println("*********获取所有学生java成绩************");
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
}
}
ackage com.xdf;
public class ArrayDemo02 {
/**
* 定义数组的方式:
* 01.
* // 声明数组
int[] nums;
// 给数组开辟空间
nums = new int[5];
// 给数组中指定位置赋值
nums[0] = 10;
nums[5] = 50; // 数组下标越界
02. 常用的方式
// 声明数组的同时给数组开辟空间
int[] nums = new int[5];
// 给数组中指定位置赋值
nums[0] = 10;
03.
// 声明数组的同时给数组开辟空间并赋值
int[] nums = { 1, 2, 3, 4, 5, 6 };
System.out.println("数组的长度:" + nums.length);
错误的方式!
不允许先声明,之后开辟空间并赋值
//声明数组
int [] nums;
//开辟空间并赋值
nums = { 1, 2, 3, 4, 5, 6 };
*/
public static void main(String[] args) {
}
}
package com.xdf;
import java.util.Scanner;
public class ArrayDemo03 {
/**
* 需求:
* 现在有一个数组 存储的值是 {20,40,10,60,100,90}
* 01.循环遍历出数组中所有的数据!
* 02.求数组中所有数据之和!
* 03.让用户输入一个值,之后判断用户输入的值,是否在数组中!
*/
public static void main(String[] args) {
// 创建一个数据保存数据
int[] nums = { 20, 40, 10, 60, 100, 90 };
// 定义一个变量保存所有数据之和
int sum = 0;
// 01.遍历所有数据
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
sum += nums[i]; // 02.求和
}
System.out.println("所有数据之和是:" + sum);
// 03.判断用户的输入
Scanner input = new Scanner(System.in);
System.out.println("请您输入一个数字:");
int num = input.nextInt();
// 定义一个标记
boolean flag = false;
for (int i = 0; i < nums.length; i++) { // 循环比较
if (num == nums[i]) {
flag = true;
break;
}
}
// 根据标记做后续的操作
if (flag) {
System.out.println("找到了");
} else {
System.out.println("没找到");
}
}
}
package com.xdf;
public class BuddleSort04 {
/**
* 冒泡排序
* 实现数值类型数组中的数据从小到大排列! 升序排列!
*
* 双重循环: 外层循环执行一次,内层循环执行一遍!
*
*
* for (int i = 1; i <= 5; i++) {
System.out.println("外层循环i的值===============》" + i);
for (int j = 1; j <= 5; j++) {
System.out.println("内层循环j的值===》" + j);
}
}
* 分析:
* 01.根据数组的长度 我们能断定 比较几轮?
* 02.但是每轮中比较几次???
* 使用外层循环控制 比较几轮! ======》 数组长度-1
* 使用内层循环控制 一轮比较几次!
* 03.真正比较数值大小的是 内层循环
* 04.内层循环中比较的时候使用等量转换
* 05. 等量转换的条件 是 下一个值 (j+1)小于当前值 j
*
*
* 口诀:
* 两两相比小靠前,
* 外层循环N-1
* 内层循环N-1-i
* 等量转换
*
*/
public static void main(String[] args) {
// 声明数组
int nums[] = { 15, 50, 12, 8, 90, 75, 2 };
// 冒泡排序
for (int i = 0; i < nums.length - 1; i++) { // 外层循环 控制几轮'
System.out.println("第" + (i + 1) + "轮开始比较");
for (int j = 0; j < nums.length - i - 1; j++) { // 内层循环 控制一轮几次
if (nums[j + 1] < nums[j]) { // 等量转换
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
// 遍历数组
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
}
package com.xdf;
import java.util.Scanner;
public class InsertDemo05 {
/**
*插入算法:
*/
public static void main(String[] args) {
// 先定义一个升序数组 预留一个位置
int nums[] = { 5, 15, 50, 70, 80, 0 };
// 获取用户输入的数值
Scanner input = new Scanner(System.in);
System.out.println("请您输入一个数字:");
int num = input.nextInt();
// 定义一个变量用来接收插入数字的下标
int index = nums.length - 1;
// 循环和数组中的每一个元素进行比较
for (int i = 0; i < nums.length; i++) {
if (num < nums[i]) { // 找到了插入数字的下标
index = i;
break;
}
}
System.out.println("插入数字的下标===>" + index);
// 循环后移
for (int i = nums.length - 1; i > index; i--) {
nums[i] = nums[i - 1];
}
// 插入数字
nums[index] = num;
}
}
package com.xdf;
import java.util.Arrays;
public class ArraysDemo06 {
/**
* Arrays 操作数组的工具类!
* 类中提供了很多方法!
* 我们可以直接通过类名直接访问!
*/
public static void main(String[] args) {
// 创建数组
int[] nums = { 10, 50, 30, 20, 80, 70 };
/**
* 增强for循环
*
* int:需要遍历集合的数据类型
* num:变量 我们可以自定义
* nums:需要遍历的集合
*/
System.out.println("***********排序之前***********");
for (int num : nums) {
System.out.println(num);
}
// 01.排序
Arrays.sort(nums);
System.out.println("***********排序之后***********");
for (int num : nums) {
System.out.println(num);
}
// 02.把数组转换成一个字符串
String result = Arrays.toString(nums);
System.out.println("数组转换成字符串之后======》" + result);
// 03.将数组中所有的元素改变成同一个值
Arrays.fill(nums, 100);
result = Arrays.toString(nums);
System.out.println("数组元素替换之后======》" + result);
// 04.复制数组 形成新的数组
int[] newNums = Arrays.copyOf(nums, 10);
result = Arrays.toString(newNums);
System.out.println("数组复制之后======》" + result);
// 05. 查询元素在数组中存在的位置 前提 必须先排序
int[] nums2 = { 10, 50, 30, 20, 80, 70 };
Arrays.sort(nums2);// 先排序
int index = Arrays.binarySearch(nums2, 80);
System.out.println("80存在的位置:" + index);
// 06.把String类型的字符串转换成 一个 char类型的数据
String hello = "hello BigData";
char[] array = hello.toCharArray();
for (char i : array) {
System.out.println(i);
}
}
}
package com.xdf;
public class ExamDemo07 {
/**
* 招租热线
*
* String phone = "";
for (int i = 0; i < nums.length; i++) {
phone += phoneNums[nums[i]];
}
System.out.println(phone);
*/
public static void main(String[] args) {
// 电话号码中的数字
int[] phoneNums = { 0, 4, 1, 3, 5, 9, 8, 7 };
// 每个号码对应的下标
int[] nums = { 2, 4, 7, 4, 3, 0, 1, 5, 5, 5, 6 };
// 求 手机号码
String phone = "";
for (int i : nums) {
phone += phoneNums[i];
}
System.out.println(phone);
}
}