// 数组
User1 user1 = new User1();
User1 user2 = new User1();
User1 user3 = new User1();
User1 user4 = new User1();
user1.test();
user2.test();
user3.test();
user4.test();
// 索引范围 0~3
User1[] users = new User1[4];
for ( int i = 0 ; i < users.length ; i++ ){ // 名称.length 获取当前数组的长度
users[i] = new User1();
}
for( int i = 0; i < users.length; i++ ) {
users[i].test();
}
// TODO 数组的声明方式:类型[] 变量:
// TODO 数组的创建方式:new 类型[容量]:
String[] names = new String[3];
// 给我们的数组的小格子添加数据,添加的方式为: 数组变量[索引] = 数据
// 添加数据和访问数据时,索引是不能超过指定的范围的( 0 ~ length-1 )
// 如果重复给相同的索引添加数据,那么等同于修改数据
names[0] = "zhangsan";
names[1] = "lisi";
names[2] = "wangwu";
// 查询(访问)数据,访问数据的方式为: 数组的变量[索引]
System.out.println(names[0]);
System.out.println(names[1]);
System.out.println(names[2]);
System.out.println("*******************************************************");
for ( int i =0; i < 3 ; i++ ){
System.out.println(names[i]);
}
}
}
class User1 {
public void test() {
System.out.println("test...");
}
}
// TODO 常见类和对象
// 数组 是一种数据结构,用于连续保存相同类型的数据
// int[] nums = new int[3];
// //nums[0] = 1;
// for (int num : nums) {
// System.out.println(num);
// }
// String[] names = {"zhangsan","lisi","wangwu"};
// System.out.println(names);
// for (String name : names) {
// System.out.println(name);
// }
// System.out.println(names.length);
// for( int i = 0; i < names.length; i++ ) {
// System.out.println(names[i]);
// }
// 二维数组
//String[][] names = {{"zhangsan","lisi","wangwu"},{"zhangsan","lisi"},{"zhangsan"}};
// 标准的二维数组
String[][] namess = new String[3][3];
namess[0][1] = "zhangsan";
//System.out.println(namess[0][1]);
for ( int row = 0; row < 3 ; row++ ) {
for( int col = 0; col < 3; col++ ) {
System.out.print(namess[row][col]+" ");
}
System.out.println();
}
}
}
// 二维数组
/*
九层妖塔
*
***
*****
*******
*/
// 1 => 1
// 2 => 3
// 3 => 5
// 4 => 7
// 1 => 0
// 2 => 1
// 3 => 2
// 4 => 3
// 0 => 8
// 1 => 789
// 2 => 678910
int row = 9;
int col = 2 * (row - 1) + 1;
String[][] nineTower = new String[row][col];
for( int i = 0; i < row; i++ ) {
for( int j = 0; j < col; j++) {
if( j >= ( row - 1) - i && j <= ( row - 1 ) + i ){
nineTower[i][j] = "*";
} else {
nineTower[i][j] = " ";
}
}
}
for( int i = 0; i < row; i++ ) {
for( int j = 0; j < col; j++) {
System.out.print(nineTower[i][j]);
}
System.out.println();
}
}
}
// TODO 常见类和对象
// 数组 选择排序
int[] nums = {1,4,3,5,2};
// 排序前
System.out.println("排序前:");
for (int num : nums) {
System.out.println(num);
}
// TODO 希望获取到的数据为 1 ,2 ,3 ,4 ,5
for( int j = 0; j < nums.length; j++ ) {
int maxIndex = 0;
for( int i = 1; i < nums.length - j; i++) {
if( nums[i] > nums[maxIndex] ) {
maxIndex = i;
}
}
int temp = nums[nums.length - j - 1];
nums[nums.length - j - 1] = nums[maxIndex];
nums[maxIndex] = temp;
}
// 排序后
System.out.println("排序后");
for (int num : nums) {
System.out.println(num);
}
// 数组 冒泡排序
int[] nums = {1,4,3,5,2};
// 排序前
System.out.println("排序前:");
for (int num : nums) {
System.out.println(num);
}
// TODO 希望获取到的数据为 1 ,2 ,3 ,4 ,5
// 简化需求:将数组的最大值放置在数组的最后
for( int i = 0; i < nums.length; i++) {
for( int j = 0; j < nums.length - i - 1; j++) {
if(nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
//排序后
System.out.println("排序后:");
System.out.println(Arrays.toString(nums)); // Arrays.toString 转成字符串输出
// 数组 数据查询 二分查找法
int[] nums = {1,2,3,4,5,6,7};
// 查询目标
int targetNum = 5;
int start = 0;
int end = nums.length - 1;
int middle = 0;
while( start <= end) {
middle = ( start + end )/2;
if(targetNum < nums[middle]) {
end = middle - 1;
} else if( targetNum > nums[middle] ) {
start = middle + 1;
} else {
break;
}
}
System.out.println("数据在数组的位置:" + middle );
}
}