A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

需求:先将一数组排序,再将一个数插入到该指定数组,要求插入完成后得到的新数组必须是顺序排列的。
我写的代码如下:
import java.util.*;
class Test01{
        public static int getIndex(int[] arr,int key){
                int max=arr.length-1,min=0,mid;               
                while(min<=max){
                        mid = (max+min)>>1;
                        if(key>arr[mid]){
                                min = mid+1;
                        }else if(key<arr[mid]){
                                max = mid-1;
                        }else{
                                return mid;
                        }
                }
                return min;
        }
        public static void print(int[] arr){
                for(int i=0;i<arr.length;i++){
                        System.out.print(arr[i]+"  ");
                }
        }
        public static int[] newArray(int[] arr,int x,int key){
                int[] newarr = new int[arr.length+1];
                for(int i=0;i<arr.length;i++){
                        if(i>=0 && i<x){
                                newarr[i] = arr[i];
                        }else if(i==x){
                                newarr[x] = key;
                        }else{
                                newarr[i+1] = arr[i];
                        }
                }
                return newarr;
        }
        public static void main(String[] args){
                int[] arr = {5,4,8,5,2,9,1,2,13,17,7,6,0};
                System.out.println("请输入一个数字:");
                Scanner input = new Scanner(System.in);
                int a = input.nextInt();
                java.util.Arrays.sort(arr);
                print(arr);
                System.out.println();
                print(newArray(arr,getIndex(arr,a),a));
                System.out.println("\n"+getIndex(arr,a));
        }
}
基本是仿照毕老师写的,可是结果是插入的位置正确,就是插入的这个数总是0,求指导

6 个回复

倒序浏览
在函数newArray中我明明有将key值赋给newarr啊
回复 使用道具 举报
import java.util.Scanner;

class Test01{
    public static int getIndex(int[] arr,int key){
            int max=arr.length-1,min=0,mid;               
            while(min<=max){
                    mid = (max+min)>>1;
                    if(key>arr[mid]){
                            min = mid+1;
                    }else if(key<arr[mid]){
                            max = mid-1;
                    }else{
                            return mid;
                    }
            }
            return min;
    }
    public static void print(int[] arr){
            for(int i=0;i<arr.length;i++){
                    System.out.print(arr[i]+"  ");
            }
    }
    public static int[] newArray(int[] arr,int x,int key){
            int[] newarr = new int[arr.length+1];
            for(int i=0;i<arr.length;i++){
                    if(i>=0 && i<x){
                            newarr[i] = arr[i];
                    }else if(i==x){
                            newarr[i] = key;
                            newarr[i+1]=arr[i];
                    }else{
                            newarr[i+1] = arr[i];
                    }
            }
            return newarr;
    }
    public static void main(String[] args){
            int[] arr = {5,4,8,5,2,9,1,2,13,17,7,6,0};
            System.out.println("请输入一个数字:");
            Scanner input = new Scanner(System.in);
            int a = input.nextInt();
            java.util.Arrays.sort(arr);
            print(arr);
            System.out.println();
            print(newArray(arr,getIndex(arr,a),a));
            System.out.println("\n"+getIndex(arr,a));
    }
}

你忽略一个小细节,就是在newArray函数中,当输入的值的位置x等于i时,应该将原来的那个arr[i]赋给newarr[i+1]。
回复 使用道具 举报
哦,我明白了,谢谢啦:)
回复 使用道具 举报
学习 学习
回复 使用道具 举报
林大涛 来自手机 中级黑马 2015-6-23 14:32:28
地板
三楼正解。
回复 使用道具 举报
我是来学习的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马