韩顺平Java入门第十五天(第六章作业)
第四题:已知有个升序数组,要求插入一个元素,该数组顺序依然是升序
//自己做的
/* 已知一个升序的数组,要求插入一个元素,该数组顺序依然是升序
比如:{10,12,45,90} 添加23后,数组为{10,12,23,45,90}
*/
import java.util.Scanner;
public class HomeWork04{
public static void main(String[] args) {
int[] arr = {10, 12, 45, 90,100,600};
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入要添加的元素");
int findnum = myScanner.nextInt();
int[] arrNew;
arrNew = new int[arr.length + 1];
for ( int i = 0;i < arr.length ; i++ ) {
if(findnum <= arr[i]){
arrNew[i] = findnum;
for (int j = 1;j < arrNew.length - i ;j++ ) {
arrNew[i+j] = arr[i+j-1];
}
System.out.println("成功插入" + findnum);
System.out.println("下标为=" + i);
break;
}
arrNew[i] = arr[i];
}
arrNew[arrNew.length -1] = findnum;// 考虑没找到比findnum大的数
System.out.println("=====arrNew 元素====="); //遍历 arrNew 输出
for(int k = 0; k < arrNew.length; k++) { //输出
System.out.print(arrNew[k] + " ");
}
}
}
//老师的思路
public class HomeWorkTeacher{
public static void main(String[] args) {
//思路:
//1.先确定 添加数应该插入的位置
//2.然后扩容
int[] arr = {10,12,45,90};
int insertNum = 23;
int index = -1;
// 遍历arr,如果发现insertNum <= arr[i],说明i就是要插入的位置
// 使用index保留 index = i
// 如果遍历完成,没有发现insertNum<=arr[i],说明index = arr.length
// 即添加到最后
for ( int i = 0; i <arr.length ;i++ ) {
if (insertNum <= arr[i]) {
index = i;
break;//找到位置
}
}
//判断index的值
if (index == -1) {//说明没有找到位置
index = arr.length;
}
System.out.print("index=" + index);
//扩容
//先创建一个新数组 大小arr.length
int[] arrNew = new int[arr.length + 1];
//将arr中的元素拷贝到arrNew中,并且跳过index位置
for (int i = 0,j = 0 ;i<arrNew.length ;i++) {
if (i!=index) {//说明可以把arr元素拷贝
arrNew[i] = arr[j];
j++;//j的作用是跳过插入位置
}else{
arrNew[i] = insertNum;
}
}
System.out.println("=====arrNew 元素====="); //遍历 arrNew 输出
for(int k = 0; k < arrNew.length; k++) { //输出
System.out.print(arrNew[k] + " ");
}
}
}
第五题:随机生成十个整数(1-100的范围)保存到数组,并倒叙打印以及求平均值、求最大值和最大值的下标,并查找里面是否有8。
import java.util.Random;
public class HomeWork05{
public static void main(String[] args) {
/*
需求分析:
1.随机生成1-100范围内的十个数保存到数组
2.倒叙打印数组
3.求数组的平均值、最大值和最大值的下标
4.查找里面是否有8
*/
int[] arr; //声明数组
arr = new int[10];
for (int i=0;i <arr.length ; i++) {//随机生成1-100范围内的十个数保存到数组
int num = (int)(Math.random()*100+1);
arr[i] = num;
}
//打印数组,求平均值最大值和下标
int sum = 0;
int max = 0;
System.out.println("=====arr元素====="); //遍历 arrNew 输出
for(int k = 0; k < arr.length; k++) { //输出
System.out.print(arr[k] + " ");
sum += arr[k];
if (k<arr.length -1) {
if(arr[k] > arr[k + 1]) {
max = arr[k];
}
}
}
System.out.println(" ");
System.out.println("平均值为" + sum/arr.length);
System.out.println("最大值为" + max);
//倒叙打印数组
System.out.println("=====arr元素倒叙=====");
for (int j= 1;j<=arr.length ; j++) {
System.out.print(arr[arr.length-j] + " ");
}
//查找数组中是否有8
int index = -1;//编程思想,
int findnum = 8;
for ( int l = 0;l < arr.length ; l++ ) {
//比较,字符串比较equals,如果要找的名字就是当前元素
if(findnum == arr[l]){
System.out.println("恭喜你找到" + findnum);
System.out.println("下标为=" + l);
index = l;//把i保存到index
break;}
}
if (index == -1) {//没有找到
System.out.println("没有找到");
}
}
}