一.数组的定义
数组:可以存放一组相同数据类型的值
变量:只能存放单个的值
*
* 如何定义数组?
* 三种:
* 第一种: int[] arr = new int[];
* 创建了一个int类型的数组,指定的长度是4
* (也就是里面最多能存放4个int类型的值)
*
* 第二种:int[] arr = {10,20,30};
*
* 第三种:int[] arr = new int[]{10,20,30};
*
* 数组的特点:
* 1.数组有下标(相当于是数组中每个值对应的序号)
* 注意:这个下标值(序号)是从0开始的
各种类型数组的默认值:
int数组的默认值是0,整数类型输出都是0
* double数组的默认值是0.0,小数类型默认值都是0.0
* String数组的默认值是null
* boolean数组的默认值是false
* char数组的默认值是'\u0000'
*
二.数组的遍历
数组的遍历:挨个查看数组中的每一个值
* 注意:因为下标都是从0开始的,而且每次递增1,那么刚好可以利用for循环变量的值和递增来代表数组的下标值,这样,我们就可以通过for循环来遍历到数组中的每一个值
注意:数组类型的变量,不能直接输出,这样打印的是一堆地址的值.
* 如果想输出数组中的内容,有两种方式:
* 1.使用Arrays工具类,将数组转换成字符串
syso(Arrays.toString);
* 2.遍历数组
遍历数组可以用一般for循环挨个输出数组中的数,也可以采用下面这种加强for循环
int [] arr2 = {1,2,3,4};
for(int a:arr2){
System.out.println(a);
}//专门用来遍历数组,其详细过程跟for循环一样是从第一个开始遍历数组,只是省略了括号里的内容,改用另一种专门的格式
插入一个面试题:length和length()的区别?
length:是数组中用来获取长度的属性
length();是字符串获取长度的方法
插入这个小的只是点是因为遍历数组的时候经常循环的次数是array.length
这里有一个关于遍历的小案例
package NewDay4;
import java.util.Arrays;
public class demo2 {
/**
* 找到荧光棒在什么位置?将荧光棒替换成玉米
* 1.遍历数组
* 2.拿"荧光棒"去匹配数组中的每一个值
* 3.如果匹配上了,则找到下标位置
*
* 将str中的黄瓜和丝瓜互换位置
*/
public static void main(String[] args) {
String[] str={"黄瓜","香蕉","茄子","荧光棒","丝瓜"};
int sigua=-1 , hgua=-1;
String temp;
for(int i=0;i<str.length;i++){
if("荧光棒".equals(str[i])){
System.out.println("荧光棒的位置:"+i);
str[i]="玉米";
}
if("黄瓜".equals(str[i])){
hgua = i;
}
if("丝瓜".equals(str[i])){
sigua = i;
}
}
//如果没有找到黄瓜和丝瓜就不进行交换
if(hgua!=-1&&sigua!=-1){
temp = str[hgua];
str[hgua] = str[sigua];
str[sigua] = temp;
System.out.println(Arrays.toString(str));
}else{
System.out.println("没有找到黄瓜和丝瓜");
}
}
}
三.数组的扩容和缩容
数组的扩容和缩容用得是数组的复制语句copyOf(arr,length);
*arr:表示要复制的数组对象
*length:表示复制的长度
扩容:如果复制的长度超过了arr原数组的长度,
*那么多出来的位置上的值就会以对应数据类型的默认值出现
*例如:int[] arr = {10,20,30}
*copyOf(arr,4)
*复制出来的新数组就是(10,20,30,0)
缩容:如果复制的长度超过了arr原数组的长度,那么少了多少个位置就会从末尾减去多少个数.
下面是今天的几个课后题目:
一.
.
package NewDay4;
import java.util.Arrays;
import java.util.Scanner;
/**
*输入5句话,逆序输出5句话
*/
public class homeWork1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String [] str = new String[5];
for(int i=4;i>=0;i--){
System.out.print("第"+(5-i)+"句话:");
String word = sc.next();
str[i] = word;
}
System.out.println("逆序输出5句话:");
for(int i=0;i<5;i++){
System.out.println(str[i]);
}
}
}
二.
package NewDay4;
import java.util.Arrays;
/**
* 随机往数组中存入10个两位的整数
* 找出他们当中的最大值和最小值,并互换位置
*
*/
public class homeWork2 {
public static void main(String[] args) {
int num1 = (int)(Math.random()*90+10);
int[] str = new int[10];
str[0] = num1;
int max = num1;
int min = num1;
for(int i=1;i<10;i++){
int num = (int)(Math.random()*90+10);
str[i] = num;
if(num>max){
max=num;
}
if(num<min){
min=num;
}
}
System.out.println(Arrays.toString(str));
System.out.println("最大值为:"+max);
System.out.println("最小值为:"+min);
}
}
三.
package NewDay4;
import java.util.Scanner;
/**
*用键盘输入10个数,合法数字为1.2.3,其他则为非法数
*输出统计每个合法数的个数和非法数的个数
*
*/
public class homeWork3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] str = new int[10];
int sum = 0;
int sum1 = 0;
int sum2 = 0;
int sum3 = 0;
System.out.println("请输入10个数:");
for(int i=0;i<10;i++){
int num = sc.nextInt();
str[i]=num;
switch(num){
case 1:sum1++;break;
case 2:sum2++;break;
case 3:sum3++;break;
default:sum++;
}
}
System.out.print("输入的10个数为:");
for(int i=0;i<10;i++){
System.out.print(str[i]+" ");
}
System.out.println();
System.out.println("数字1的个数:"+sum1);
System.out.println("数字2的个数:"+sum2);
System.out.println("数字3的个数:"+sum3);
System.out.println("非法数字的个数:"+sum);
}
}
四.
package NewDay4;
import java.util.Arrays;
/**
*有一个数组假设为int[] array= {1,3,-1,5,-2}
*要求新数组将原数组升序输出
*
*/
public class homeWork4 {
public static void main(String[] args) {
int[] array = {1,3,-1,5,-2};
int temp;
int t = 0;
for(int i=0;i<array.length;i++){
int min = array[i];
for(int j=i;j<array.length;j++){
if(array[j]<min){
min = array[j];
t = j;
}
}
temp = array[i];
array[i] = array[t];
array[t] =temp;
}
System.out.println(Arrays.toString(array));
}
}
这个第四题是个冒泡排序的经典题目,我这个方法还不是经典算法,经典算法应该是要慢慢的把最小的数冒出来,我这个是找出最小的数后放在最前面.
以下是7月1日的内容
正儿八经的冒泡排序算法
冒泡排序:对数组进行排序的
*(挨着的两个数,两两相比)
*两两相比,如果碰到比自己小的数,互换位置
*已知一个数组:int[] arr = {99,56,45,22,67,88,17}
*将数组排序,变成从小到大或者从大到小的顺序排列
*总共比较的轮数: 每轮比较的次数:
* 第一轮:1 6
* 第二轮:2 5
* 第三轮:3 4
* 第四轮:4 3
* 第五轮:5 2
* 第六轮:6 1
*/
package NewDay5;
import java.util.Arrays;
public class demo2 {
public static void main(String[] args) {
int[] arr = {99,56,45,22,67,88,17};
for(int i = 0;i<arr.length-1;i++){//比较的轮数
for(int j =0;j<arr.length-i-1;j++){//每轮比较的次数
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
四.二维数组
一. 二维数组的定义:
* 第一种:
* int[][]arr=new int[2][2];
* {{10,20},{30,40}}
* 第二种:
* int[][] arr = {{10,20},{20,30,40}}
* 第三种:
* int[][] arr =new int[][]{{10,20},{20,30}}
* 第四种:
* int[][] arr = new int[2][];
二.遍历方式
package NewDay5;
import java.util.Arrays;
public class demo3 {
public static void main(String[] args) {
int[][] arr = {{10,20,30},{20,30,40}};
System.out.println(Arrays.toString(arr));
for(int i = 0;i < arr.length;i++){
for(int j = 0;j <arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
}
}
二维数组的遍历方式与一维数组类似,只能一个一个用for循环输出或者用Arrays.toString输出第二个维度的一个数组.