Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中不使用排序算法,将对象元素按顺序插入数组中_Java_Arrays_Algorithm_Sorting_Insert - Fatal编程技术网

在Java中不使用排序算法,将对象元素按顺序插入数组中

在Java中不使用排序算法,将对象元素按顺序插入数组中,java,arrays,algorithm,sorting,insert,Java,Arrays,Algorithm,Sorting,Insert,我有一个编程项目ת我几乎完成了,但我正在努力将一个从控制台生成的新对象插入阵列的正确位置 我可以创建对象、在开头或结尾插入、删除对象等。但是数组需要有序(月、日、时间),我被卡住了。 我已经通过论坛、信息网站、书籍等搜索了一天半,但找不到答案 另外,我不允许使用数组以外的任何东西(ArrayList、LinkedList等),也不能使用任何排序算法(bubblesort、insertionsort等) 方向特别要求我根据需要移动数组元素,并将新对象放在中间/正确的位置。我也在使用NetBeans

我有一个编程项目ת我几乎完成了,但我正在努力将一个从控制台生成的新对象插入阵列的正确位置

我可以创建对象、在开头或结尾插入、删除对象等。但是数组需要有序(月、日、时间),我被卡住了。
我已经通过论坛、信息网站、书籍等搜索了一天半,但找不到答案

另外,我不允许使用数组以外的任何东西(ArrayList、LinkedList等),也不能使用任何排序算法(bubblesort、insertionsort等)

方向特别要求我根据需要移动数组元素,并将新对象放在中间/正确的位置。我也在使用NetBeans

    /*
 * 
 * 
 */
package project1;

import UserInput.UserInput;

public class Schedule {

    Delivery[] deliObj = new Delivery[20];

    int count = 0;

    public Schedule(){//set default objects 
        deliObj[0] = new Delivery("MAR", 4, 17, 30, "Pizza");
        count++;
        deliObj[1] = new Delivery("APR", 1, 06, 30, "Special Deliery");
        count++;
        deliObj[2] = new Delivery("MAY", 6, 12, 00, "Amazon (Books)");
        count++;
        deliObj[3] = new Delivery("JUN", 3, 11, 15, "Car Parts");
        count++;

    }
    public void setDelivery(Delivery[] deliObj){
        this.deliObj = deliObj;

    }
    public Delivery[] getDelivery(){
        return this.deliObj;
    }

    public static void main(String[] args){
            Schedule scheduleObj = new Schedule();
            scheduleObj.run();
    }

    public void run(){
        System.out.println("\n***** MAIN DELIVERY CONSOLE *****\n");
        System.out.println("A)dd delivery");            
        System.out.println("D)delete Delivery");           
        System.out.println("L)ist Delivery");           
        System.out.println("E)xit");
        char selection = Character.toUpperCase(UserInput.getChar());

        switch(selection){
            case 'A': addDelivery();                          
                break;
            case 'D': deleteDelivery();
                break;
            case 'L': listDelivery();
                break; 
            case 'E': System.exit(0); 

        }

    }    

    public void addDelivery(){
        Delivery getInputDelivery = new Delivery();
        getInputDelivery.InputDelivery();
        deliObj[count] = getInputDelivery;
        count++;
        insertDelivery(getInputDelivery);
        run();
    }

    public void deleteDelivery(){


    System.out.println("Please enter the number you wish to delete: ");
    int num = UserInput.getInt(0,count);
    //deliObj[num-1] = new Delivery();            
        deliObj[num-1] = null;
        count--;
        run();
    }

    public void listDelivery(){

        for(int i=0;i<count;i++) {

            System.out.println(i+1 + ". " + deliObj[i]);
        }
        run();
    }       

    public boolean compareDelivery(Delivery A1, Delivery A2){
        //Delivery delivery = deliObj[count-4];
        int numMonth;
        int numMonth1;

        numMonth = Delivery.integerMonth(A1.getMonth());
        numMonth1 = Delivery.integerMonth(A2.getMonth());

        if(numMonth < numMonth1){
            return true;
        }
        else if(numMonth == numMonth1){
            if(A1.getDay() < A2.getDay()){
                return true;
            }
            else if(A1.getDay() == A2.getDay()){
                if(A1.getHour() < A2.getHour()){
                    return true;
                }
                else if(A1.getHour() == A2.getHour()){
                    if(A1.getMintute() < A2.getMintute()){
                        return true;
                    }
               }
            }
        } //else return false; 

        return false;
    }

    public void insertDelivery(Delivery temp){



        for(int i = 0; i < count; i++){
           /*if(!compareDelivery(deliObj[i], temp)) {
                for(int k = 1; k < count; k++) {
                    Delivery temp2 = deliObj[k];
                deliObj[k] = deliObj[count-1];
                deliObj[count-1] = temp2;
                }*/
           if(compareDelivery(deliObj[i], temp)) {

                Delivery temp2 = deliObj[i];
                deliObj[i] = deliObj[count-1];
                deliObj[count-1] = temp2;


            }

        }
       /*for (int k = 0; k < count-1; k++) { 
             if(compareDelivery(deliObj[k], temp)) {
                 Delivery temp2 = deliObj[k];
                deliObj[k] = deliObj[count-1];
                deliObj[count-1] = temp2;
                //deliObj[count] = deliObj[k];
                //deliObj[k] = deliObj[count-1];

            }                            
            } */
    }



}
/*
* 
* 
*/
一揽子计划1;
导入UserInput.UserInput;
公课时间表{
交货[]deliObj=新交货[20];
整数计数=0;
public Schedule(){//设置默认对象
deliObj[0]=新交付(“3月”,4日,17日,30日,“比萨饼”);
计数++;
deliObj[1]=新交付(“4月1日、6日、30日,“特殊交付”);
计数++;
deliObj[2]=新交付(“5月6日、12日、00日,“亚马逊(图书)”);
计数++;
deliObj[3]=新交付(“6月”,3日,11日,15日,“汽车零件”);
计数++;
}
公共交付(交付[]deliObj){
this.deliObj=deliObj;
}
公共交付[]获取交付(){
返回此文件。deliObj;
}
公共静态void main(字符串[]args){
Schedule scheduleObj=新计划();
scheduleObj.run();
}
公开募捐{
System.out.println(“\n****主传送控制台******\n”);
系统输出打印(“A)dd交付”);
System.out.println(“D)删除交付);
系统输出打印(L)列表交付);
System.out.println(“E)xit”);
char selection=Character.toUpperCase(UserInput.getChar());
开关(选择){
案例“A”:addDelivery();
打破
案例“D”:deleteDelivery();
打破
案例“L”:listDelivery();
打破
案例“E”:系统出口(0);
}
}    
公共交付(){
交付getInputDelivery=新交付();
getInputDelivery.InputDelivery();
deliObj[count]=getInputDelivery;
计数++;
插入交付(getInputDelivery);
run();
}
公共交付(){
System.out.println(“请输入要删除的号码:”);
intnum=UserInput.getInt(0,count);
//deliObj[num-1]=新交付();
deliObj[num-1]=null;
计数--;
run();
}
公共服务交付(){

对于(int i=0;i通常不能将元素插入数组中。数组是固定长度的(它们正好包含
n
元素,并且不能将数组更改为包含
n+1
n-1
元素)。您可以创建一个新数组,该数组具有容纳
n+1
元素的空间,并将元素从原始数组复制到新数组中,在创建新元素时将新元素插入正确的位置。您还可以创建一个太大的数组,以防获得更多元素(看起来像您所做的那样)然后开始向上移动元素


这听起来像是一个家庭作业问题。你能问某人(实验室助手、导师、合作学生)你的想法是否正确吗?要求“我不允许使用数组以外的任何东西”和插入的需要似乎不一致。

我先假设“数组以外的任何东西”不扩展到实用程序类,如
java.util.Arrays
。如果扩展了,您将需要实现一些我在自己下面使用的方法


第一步是使您的
交付
实现
可比
,或者创建一个实现
比较器
的新类。这定义了
交付
对象的顺序。此更改应该很简单,因为您已经定义了
可比交付
方法

通过此修改,您可以通过调用
Arrays.binarySearch(deliObj,temp)
来获取插入值的索引。如果不允许使用
Arrays
类,请展示一个简单的二进制搜索实现


您可能正在查找。返回:搜索键的索引,如果它包含在数组中;否则,((插入点)-1)。我可以,这是我明天要做的,但遗憾的是,我询问的少数人已经不愿意提供模糊的“建议”之外的帮助我问的助教也是这样,好像我应该知道我所在班级的b/c。这真的很糟糕。要求是20个元素的数组,但默认只输入4个元素,然后可以添加/删除到20个限制。我同意这是不一致的,这就是为什么我有这么多困难。感谢quick reply表示在“Delivery”类中实现我的“compareDelivery()”有很多困惑。我是否应该在“insertDelivery()过程中调用“compareDelivery()”“?还有,我如何找到‘binarySearch’返回的索引?一旦我找到了,我就如何交换它,当然是交换正确的索引?我认为这需要完全改变数组…@Camdeazy我对交付中的
compare
方法的意思是你应该更改类声明对于
Delivery
to
public类Delivery实现了Comparable
,然后在类的主体中添加一个方法
public int compare(Delivery d)
,该方法包含与
compareDelivery
方法相同的逻辑。这允许您
package project1;

import UserInput.UserInput;

public class Delivery {

private static final String FINAL_MONTH[] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
private String month;
private int day;
private int hour;
private int minute;
private int second;
private String userMessage;

public static int integerMonth(String compareMonth){
    for(int i = 0; i < FINAL_MONTH.length; i++){
        if(compareMonth.equals(FINAL_MONTH[i])){
            return i;
        }                
    }
    return -1;
}

public Delivery(String month, int day, int hour, int minute, String userMessage) {
    this.month = month;
    this.day = day;
    this.hour = hour;
    this.minute = minute;
    this.userMessage = userMessage;
}

public void setMonth(String month) {

    for (String FINAL_MONTH1 : FINAL_MONTH) {
        if (month.equalsIgnoreCase(FINAL_MONTH1)) {
            this.month = month.toUpperCase();
        }
    }
}

public String getMonth() {
    return this.month;
}

public void setDay(int day) {
    this.day = day;
}

public int getDay() {
    return this.day;
}

public void setHour(int hour) {
    this.hour = hour;
}

public int getHour() {
    return this.hour;
}

public void setMinute(int minute) {
    this.minute = minute;
}

public int getMintute() {
    return this.minute;
}

public void setSecond(int second) {
    this.second = second;
}

public int getSecond() {
    return this.second;
}

public void setUserMessage(String userMessage) {
    this.userMessage = userMessage;
}

public String getUserMessage() {
    return this.userMessage;
}

public Delivery() {
    month = "JAN";
    day = 1;
    hour = 12;
    minute = 00; 
    userMessage = "default";

}

@Override
public String toString() {
    String data = String.format(month + " %02d, " + "%02d:" + "%02d " + userMessage, day, hour, minute);
    return data;
}

public void InputDelivery() {
    System.out.println("Enter month of delivery(3 letter abbreviation): ");
    setMonth(UserInput.getString(3, 3));
    System.out.println("Enter day of delivery: ");
    setDay(UserInput.getInt(0, 31));
    System.out.println("Enter hour of delivery (0-23): ");
    setHour(UserInput.getInt(0, 24));
    System.out.println("Enter minute of delivery (0-59): ");
    setMinute(UserInput.getInt(0, 59));
    System.out.println("Enter message for delivery (40 Character Max): ");
    setUserMessage(UserInput.getString(0,40));
    System.out.println(toString());

}



}
1    int[] data;
2    int size;
3
4    public boolean binarySearch(int key) 
5    {
6         int low = 0;
7         int high = size - 1;
8          
9         while(high >= low) {
10             int middle = (low + high) / 2;
11             if(data[middle] == key) {
12                 return true;
13             }
14             if(data[middle] < key) {
15                 low = middle + 1;
16             }
17             if(data[middle] > key) {
18                 high = middle - 1;
19             }
20        }
21        return false;
22   }
public static int[] addPos(int[] a, int pos, int num) {
    int[] result = new int[a.length];
    for(int i = 0; i < pos; i++)
        result[i] = a[i];
    result[pos] = num;
    for(int i = pos + 1; i < a.length; i++)
        result[i] = a[i - 1];
    return result;
}