java在数组中插入数字问题,求帮助

zz1995116 2014-11-19 08:26:34
import java.util.*;
public class array {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int[] arr={1,3,5,7,9}; //4
System.out.println("输入你要插入的数字");
int num=in.nextInt();
/*arr[arr.length-1]=num;
for(int i=arr.length;i>0;i--)
{
if(arr[i]<arr[i-1])
{
int t=arr[i];
arr[i]=arr[i-1];
arr[i-1]=t;
}*/
else
{
break;
}
}
for(int i=0;i<=arr.length;i++)
{
System.out.println(arr[i]);
}
}
}


上述代码中注释部分不能理解
...全文
1246 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MikeDDT009 2017-04-17
  • 打赏
  • 举报
回复
数组里插入新的元素的话思想是这样的: 1 首先要理解数组的长度一旦声明就是固定大小的 2 插入一位数的话需要新建一个长度比原数组大1的新数组 3 所谓插入本质就是把原数组的插入位置(下标)前的元素给予新数组,然后在插入位置放入新元素,后面位置依次后移 里面最主要的就是找到下标。 我这里给个前面蛋疼时候做的数组简易排序,也就增删改查之类的,就是自己当时做这个给的备注没那么足了
/**
 * 
 * @功能:	1.新建一个数组int[] arr = new int[20];
			2.动态赋值10个1到100之间的数字,利用随机数赋值;
			3.对数组进行从小到大的排序;(必须用冒泡排序法)
			4.插入一个1到100之间的数字到数组的第5个位置;
			5.查询50这个数字是否在数组中,如果有打印“OK”,如果没找到打印“NO”;
			6.删除下标为6的这个数字,然后再从大到小排序;(必须用冒泡排序法)
			7.修改下标为3的这个数字为10;

 
 */
public class ArrayFinalTest {

	public static void main(String[] args) {
		
		//建立数组
		int[] arr = new int[20];
		
		//赋值
		for (int i = 0; i < 10; i++) {
			arr[i] = ((int)(Math.random() * 99999)) % 100 + 1;
		}
		System.out.println("初始化数组:");
		for (int i = 0; i < 10; i++) {
	
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		//排序
		int temp;
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9 - i; j++) {
				if (arr[j] > arr[j + 1]) {
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
		System.out.println();
		System.out.println("排序后:");
		
		for (int i = 0; i < 10; i++) {
			
			System.out.print(arr[i] + " ");
		}
		
			
		//插入第五个位置index = 4
		
		for (int j = 9; j >= 4; j--) {
			arr[j + 1] = arr[j];
		}
		arr[4] = ((int)(Math.random() * 99999)) % 100 + 1;
		
		System.out.println();
		System.out.println("插入后:");
		for (int k = 0; k < 11; k++) {
	
			System.out.print(arr[k] + " ");
		}
		
		System.out.println();
		//查询
		for (int j = 0; j < 11; j++) {
			if (arr[j] == 50) {
				System.out.println("50有这个数");
				break;
			} else {
				System.out.println("没有50这个数");
				break;
			}
		}
			
			
		//删除排序下标为6
	
		for (int j = 6; j < 10; j++) {
			temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
		System.out.println();
		System.out.println("删除后:");
		for (int k = 0; k < 10; k++) {
	
			System.out.print(arr[k] + " ");
		}
			
			
		for (int z = 0; z < 9; z++) {
			for (int j = 0; j < 9 - z; j++) {
				if (arr[j] < arr[j + 1]) {
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}	
			
		System.out.println();	
		System.out.println("删除后排序:");
		for (int k = 0; k < 10; k++) {
	
			System.out.print(arr[k] + " ");
		}	
			
		arr[3] = 10;
		System.out.println();
		System.out.println("修改后:");
		for (int k = 0; k < 10; k++) {
	
			System.out.print(arr[k] + " ");
		}		
		
		
	}
}
z_duck 2017-04-17
  • 打赏
  • 举报
回复
引用 4 楼 cocoa_cactus 的回复:
1.代码有bug,数组下边越界 2.类名应当大写 3.问题的解释如下:

import java.util.*;
public class Array{
public static void main(String[] args){
	Scanner in=new Scanner(System.in);
	int[] arr={1,3,5,7,9};  //4:下标最大到4,因为共有5个元素(arr.length=5),而下标从0开始
	System.out.println("输入你要插入的数字");
	int num=in.nextInt();

	arr[arr.length-1]=num; // 由上一个注释这句代码等效于:arr[4]=num;
							// 此时数组最后一个元素的值变为num
	for(int i=arr.length-1;i>=0;i--){ // 把数组下标最大值赋值给i,只要i大于等于数组最小下标就执行循环体
		if(arr[i]<arr[i-1]){ // 如果数组第i+1个元素小于第i个元素时 [注意下标比实际位置小1]
			int t=arr[i]; 	 // 下面的代码定义了一个临时变量,借此交换数组中两个值
			arr[i]=arr[i-1];
			arr[i-1]=t;
		}
		/*
		else{			// 这里是个bug,不满足if条件时会自动判断并执行下一次循环,
			break;		// 试试把数组改成这样int[] arr={1,6,5,7,9},你就明白为什么不能这么写了
		}*/
	}

	for(int i=0;i<arr.length;i++)
		System.out.println(arr[i]);
	
	}
}
哇,思维好严谨,受教了:-)
南猿北辙 2014-11-19
  • 打赏
  • 举报
回复
代码中有2处需要修改 ①for(int i=arr.length;i>0;i--) 改为 for(int i=arr.length-1;i>0;i--) ②for(int i=0;i<=arr.length;i++) 改为 for(int i=0;i<arr.length;i++) 其他如楼上说说
wyc_ 2014-11-19
  • 打赏
  • 举报
回复
我的理解这个题目的本意是在一个有序数组中插入一个新值,调整数组使其重新有序。
_reason 2014-11-19
  • 打赏
  • 举报
回复
1.代码有bug,数组下边越界 2.类名应当大写 3.问题的解释如下:

import java.util.*;
public class Array{
public static void main(String[] args){
	Scanner in=new Scanner(System.in);
	int[] arr={1,3,5,7,9};  //4:下标最大到4,因为共有5个元素(arr.length=5),而下标从0开始
	System.out.println("输入你要插入的数字");
	int num=in.nextInt();

	arr[arr.length-1]=num; // 由上一个注释这句代码等效于:arr[4]=num;
							// 此时数组最后一个元素的值变为num
	for(int i=arr.length-1;i>=0;i--){ // 把数组下标最大值赋值给i,只要i大于等于数组最小下标就执行循环体
		if(arr[i]<arr[i-1]){ // 如果数组第i+1个元素小于第i个元素时 [注意下标比实际位置小1]
			int t=arr[i]; 	 // 下面的代码定义了一个临时变量,借此交换数组中两个值
			arr[i]=arr[i-1];
			arr[i-1]=t;
		}
		/*
		else{			// 这里是个bug,不满足if条件时会自动判断并执行下一次循环,
			break;		// 试试把数组改成这样int[] arr={1,6,5,7,9},你就明白为什么不能这么写了
		}*/
	}

	for(int i=0;i<arr.length;i++)
		System.out.println(arr[i]);
	
	}
}
wyc_ 2014-11-19
  • 打赏
  • 举报
回复
引用 2 楼 lida994707194 的回复:
这很明显不是个排序算法 只能说是冒泡排序的一部分 返回结果是第一个数是整个数组的最小一个
嗯,说错了,相当于冒泡中的一趟
lida994707194 2014-11-19
  • 打赏
  • 举报
回复
这很明显不是个排序算法 只能说是冒泡排序的一部分 返回结果是第一个数是整个数组的最小一个
wyc_ 2014-11-19
  • 打赏
  • 举报
回复
arr[arr.length-1]=num; //插入到数组末尾 for(int i=arr.length;i>0;i--) //从后向前遍历数组每一个元素 { if(arr[i]<arr[i-1]) 如果后面的元素小于前面的元素,就交换两个值 { int t=arr[i]; arr[i]=arr[i-1]; arr[i-1]=t; } 这是一个排序的过程,按照从小到大的顺序排。不明白的话,搜一下冒泡法排序。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧