将输入的元素添加到数组中正确的位置(JAVA)

错误代码:

//找到应该插入的下标index

for(int i = 0; i <array.length; i++){

if(num<array[i];){

index = i;

}

}

for(int i = index; i<array.length-1; i++){

array[i+1] = array[i];

}

array[index] = num;

for(int i = 0; i<array.length; i++){

System.out.print(array[i]+"\t");

}

分析:输入2以后,正确插入2以后,2以后的元素全都变成了3,因为下标index以后的都被赋值为初始index下标的值了。循环里面又继续将index的值往后面赋值,出现了如图所示的结果。因此代码循环语句有错误需要改进。

正确代码:

//找到应该插入的下标index

for(int i = 0; i <array.length; i++){

if(num<array[i];){

index = i;

}

}

//插入以后,index以后的每一个元素下标也要加1

for(int i = array.length-2; i>index-1; i--){

array[i+1] = array[i];

}

array[index] = num;

for(int i = 0; i<array.length; i++){

System.out.print(array[i]+"\t");

}

分析:因为是将前一位赋值为后面一位。所以不能循环语句不能从前面往后面走,所以我们循环语句从后往前,因为数组的大小不能改变,插入了一个数,就需要将最后一个数舍弃掉,所以初始的循环是从array.length-2开始,到index结束,如上所示。

时间: 2024-10-29 19:06:25

将输入的元素添加到数组中正确的位置(JAVA)的相关文章

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

数组元素查找(查找指定元素第一次在数组中出现的索引)

import java.util.Scanner; /* * 需求:数组元素查找(查找指定元素第一次在数组中出现的索引) * (1)给定数组int[] arr={5,7,3,2,5} * (2)要查询的元素通过键盘录入的方式确定 * (3)定义一个查找数组元素第一次出现位置的方法(注:要查找的元素就是键盘录入的数据) * *分析: * A:定义数组int[] arr={5,7,3,2,5}; * B:键盘录入一个被查询的数据 * C:写方法实现查找指定元素在数据中第一次出现的索引 * 遍历数组,

3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; /* * 3.键盘输入10个数,放到数组中 (1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中 */ public class Test3 { public static int[] arr = new int[10]; public static void

javascript判断元素是否在数组中

代码: /* @desc:判断元素是否在数组中 @param value 需要判断的元素 @param arr 要检测的数组 @return true:在数组中 flase:不在数组中 */ function inarray(value,arr){ for(var i = 0; i < arr.length; i++){ if(value === arr[i]){ return true; } } return false; } 测试: var arr = [1,2,5] var value =

数组中的逆序对(Java实现)

来源:剑指offer 逆序对定义:a[i]>a[j],其中i<j 思路:利用归并排序的思想,先求前面一半数组的逆序数,再求后面一半数组的逆序数,然后求前面一半数组比后面一半数组中大的数的个数(也就是逆序数),这三个过程加起来就是整体的逆序数目了. 易错点:第二个方法在归并时,需要array的左右子数组是已排好序的数组,归并的结果是得到排好序的数组copy.因此在递归调用iPairs时,方法的前2个参数是颠倒的,这样得到的array才是排好序的. 比如第一次时用copy当辅助数组对array排序

删除数组元素 功能描述:有一个有序整数数组,要求输入一个数字, 在数组中查找是否有这个数,如果有,将该数从数组中删除, 要求删除后的数组仍然保持有序;

public static void main(String[] args) { int[] a={23,34,56,7,8,9}; int[] b = new int[a.length]; Scanner scan = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = scan.nextInt(); boolean flag = true; int i = 0; for( ; i < a.leng

关于将多个json对象添加到数组中的测试

如果用数组push添加不到数组中的,这个我也不知道是为什么?然后我选择了另一种发放就是从数组出发,逆向添加 最后的数组是这样的: data1=['公司1','公司2','公司3','公司4']; arrVal=[355,310,520,260]; data2=[ {value:335, name:'公司1'},{value:310, name:'公司2'}, {value:234, name:'公司3'}, {value:1548, name:'公司4'}]; 这样是不行的: for(var i

向量元素是否在数组中出现

clcclear all;close all; arrayA = [1,2,2,2;3,3,4,1];arrayB = [3,2,5,1];arrayB = sort(arrayB(:)); % 对数组arrayB进行列排序arrayB(~[diff(arrayB);1]) = []; % 踢掉数组中重复元素:[ra,rc] = size(arrayA);m = zeros(ra,rc);arrayA = arrayA(:);lengthArrayA = length(arrayA);[sa,i

[leetcode] 34. 在排序数组中查找元素的第一个和最后一个位置(Java)

34. 在排序数组中查找元素的第一个和最后一个位置 题目要求用O(logn),明显要用二分. 其实二分不难,难的是要处理好边界 class Solution { public int[] searchRange(int[] nums, int target) { int i = 0, j = nums.length; int mid = (i + j) / 2; int p = -1; while (i < j) { if (nums[mid] == target) { p = mid; bre