热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java数组中数字插入难题,寻求专业指导与解决方案

importjava.util.*;publicclassarray{publicstaticvoidmain(String[]args){Scannerinnew
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] {
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]);
}
}
}


上述代码中注释部分不能理解

8 个解决方案

#1


arr[arr.length-1]=num;   //插入到数组末尾
for(int i=arr.length;i>0;i--)  //从后向前遍历数组每一个元素
{
if(arr[i] {
int t=arr[i];
arr[i]=arr[i-1];
arr[i-1]=t;
}
这是一个排序的过程,按照从小到大的顺序排。不明白的话,搜一下冒泡法排序。

#2


这很明显不是个排序算法 只能说是冒泡排序的一部分 返回结果是第一个数是整个数组的最小一个

#3


引用 2 楼 lida994707194 的回复:
这很明显不是个排序算法 只能说是冒泡排序的一部分 返回结果是第一个数是整个数组的最小一个

嗯,说错了,相当于冒泡中的一趟

#4


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] 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 System.out.println(arr[i]);

}
}

#5


我的理解这个题目的本意是在一个有序数组中插入一个新值,调整数组使其重新有序。

#6


代码中有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


其他如楼上说说

#7


引用 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] 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 System.out.println(arr[i]);

}
}


哇,思维好严谨,受教了:-)

#8


数组里插入新的元素的话思想是这样的:
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] + " ");
}


}
}


推荐阅读
author-avatar
廊坊0316慢摇酒吧_196
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有