Java一次更改多个值

时间:2017-04-11 12:32:56

标签: java

我真的不喜欢问这些问题,这可能是重复的,但我真的很困惑,因为我是java的新手(不是一般的编程)我不能搞清楚。

问题如下:数组names应该排序,我想出了以下代码:

String[] temp_names = names;

    for (int i = 0; i < names.length; i++)
    {
        for (int j = 0; j < names.length; j++)
        {
            String biggest = ""+(0);
            int biggest_index = 0;

            for (int chr = 0; chr < ((biggest.length() < temp_names[j].length()) ? biggest.length() : temp_names[j].length()); chr++)
            {
                if (biggest.toCharArray()[chr] > temp_names[j].toCharArray()[chr])
                {
                    break;
                }
                else if (biggest.toCharArray()[chr] < temp_names[j].toCharArray()[chr])
                {
                    biggest = temp_names[j];
                    biggest_index = j;
                    break;
                }
            }

            names[i] = biggest;
            temp_names[biggest_index] = ""+(255);
        }
    }

问题发生在最后一行。我将值设置为尽可能高,因此在排序时它基本上被忽略(它总是最后一次)。问题是,当temp_names[biggest_index]设置为&#39; 255&#39;时,biggest也会设置为255,而names[i]又会将names[i] = new String(biggest)设置为255.这样我就会得到一个数组满是空名。

我知道这与java copys变量作为参考而不是作为值有关,但是当我尝试使用 https://www.website.com/product-brand-name-p254.html 复制/克隆它时,它仍然具有相同的结果。我尝试了很多不同的事情,现在我的想法已经用完了,所以我希望这里有人可以提供帮助。

提前感谢您的回答, 害

- 编辑: 这是学校的练习,所以我不能只使用标准的java函数。

1 个答案:

答案 0 :(得分:0)

class SOCLass {

    public static void main(String[] args){

        String[] names = new String[] {"joe", "bill"};
        String[] temp_names  = names;// new String[names.length];
        //System.arraycopy(names, 0, temp_names, 0, 2);

        for (int i = 0; i < names.length; i++)
        {
            for (int j = 0; j < names.length; j++)
            {
                String biggest = ""+(0);
                int biggest_index = 0;

                for (int chr = 0; chr < ((biggest.length() < temp_names[j].length()) ? biggest.length() : temp_names[j].length()); chr++)
                {
                    if (biggest.toCharArray()[chr] > temp_names[j].toCharArray()[chr])
                    {
                        break;
                    }
                    else if (biggest.toCharArray()[chr] < temp_names[j].toCharArray()[chr])
                    {
                        biggest = temp_names[j];
                        biggest_index = j;
                        break;
                    }
                }

                names[i] = biggest;
                temp_names[biggest_index] = ""+(255);
            }
        }

        for(String s : names)
            System.out.println(s);
        for(String s : temp_names)
            System.out.println(s);

    }

}

这是您编写的代码。它在两者上打印出255。在新的String [...]和System.arraycopy(...)中注释,它打印最长/最大的帐单。

通过不分配新数组,temp_names和名称是相同的。一个变化反映在另一个