Java-这种排序方法是个谜

Java-这种排序方法是个谜,java,sorting,methods,Java,Sorting,Methods,我被下面的代码困住了,它应该将一个键/指针组合插入数据结构的一个节点,并将其保持在一个排序的顺序中,但是顺序似乎是随机的,我就是不知道出了什么问题 public void add (int val, Node no) { // Find the index where to insert int maxval = 0; for (int o = 0; o < this.values.length; o++) if (val < this.val

我被下面的代码困住了,它应该将一个键/指针组合插入数据结构的一个节点,并将其保持在一个排序的顺序中,但是顺序似乎是随机的,我就是不知道出了什么问题

public void add (int val, Node no) {
    // Find the index where to insert
    int maxval = 0;
    for (int o = 0; o < this.values.length; o++)
        if (val < this.values[o]) {
            maxval = o;
            break;
        }
    // Move all the data from the chosen index one spot forward
    for (int o = this.values.length-1; o > maxval; o--) {
        this.values[o] = this.values[o-1];
        this.children[o] = this.children[o-1];
    }
    // Insert the value
    this.children[maxval] = no;
    this.values[maxval] = val;
}
public void add(int val,节点号){
//查找要插入的索引
int maxval=0;
for(int o=0;omaxval;o--){
this.values[o]=this.values[o-1];
this.children[o]=this.children[o-1];
}
//插入值
this.children[maxval]=否;
此.values[maxval]=val;
}

一个问题是,如果
val
大于所有当前值,则最终得到
maxval=0
。您可以通过将
maxval
初始化为
values.length-1
来解决此问题,首先可能是


另一个问题是,实际上您正在丢失
值[values.length-1]
的原始值-它被先前的值覆盖,但没有任何内容将该值复制到其他位置。这里需要的行为是什么?

一个问题是,如果
val
大于所有当前值,那么最后的结果是
maxval=0
。您可以通过将
maxval
初始化为
values.length-1
来解决此问题,首先可能是


另一个问题是,实际上您正在丢失
值[values.length-1]
的原始值-它被先前的值覆盖,但没有任何内容将该值复制到其他位置。这里想要的行为是什么?

啊,是的,这一定是答案!,我只需要在方法的开头添加一个if语句,而且,当当前节点已满时,不会访问代码中调用该方法的点,因此这不是问题所在。谢谢我刚刚将if(val值初始化
maxval
[values.length-1]
(最大值的索引)而不是通过
values.lengh-1
?@denisk:不,因为
maxval
实际上是新值的索引,而不是值。但是如果有
大小()
included…我认为建议的更改应该可以。啊,是的,这一定是答案!我只需在方法的开头添加一个if语句,而且,当当前节点已满时,不会访问代码中调用方法的点,因此这不是问题。谢谢!我刚刚更改了if(val值初始化
maxval
[values.length-1]
(最大值的索引)而不是通过
values.lengh-1
?@denisk:不,因为
maxval
实际上是新值的索引,而不是一个值。但是如果涉及
size()
的话,它会发生变化……我认为建议的更改应该可以。插入一个值将被丢弃(覆盖)最大值。这就是目的吗?java中有可用的排序集。您不需要自己实现它。插入值将丢弃(覆盖)最大值。这就是目的吗?java中有可用的排序集。您不需要自己实现它。