黑马程序员技术交流社区

标题: 小白刚学到数组,遇到困难,求大神解答 [打印本页]

作者: java过客    时间: 2015-6-23 10:28
标题: 小白刚学到数组,遇到困难,求大神解答
需求:先将一数组排序,再将一个数插入到该指定数组,要求插入完成后得到的新数组必须是顺序排列的。
我写的代码如下:
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,求指导

作者: java过客    时间: 2015-6-23 10:31
在函数newArray中我明明有将key值赋给newarr啊
作者: 黑马无敌    时间: 2015-6-23 11:30
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]。
作者: java过客    时间: 2015-6-23 12:00
哦,我明白了,谢谢啦:)
作者: fanxin_meng    时间: 2015-6-23 12:07
学习 学习
作者: 林大涛    时间: 2015-6-23 14:32
三楼正解。
作者: 帅帅loyal    时间: 2015-6-23 15:27
我是来学习的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2