Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 函数返回的是00000而不是0。这是一个用于查找数组中形成的最大数的程序 公共类解决方案实现了Comparator{ 公共字符串最大编号(最终列表A){ 清单B=A; StringBuilder str=新的StringBuilder(); 集合。排序(B,this); 对于(int i=B.size()-1;i>=0;i--){ str=str.append(B.get(i)); } return str.toString(); } 公共整数比较(整数X,整数Y){ 字符串XY=整数。toString(X); 字符串YX=Integer.toString(Y); 字符串QW=XY+YX; 字符串WE=YX+XY; 返回QW.compareTo(WE); } }_Java_Comparator - Fatal编程技术网

Java 函数返回的是00000而不是0。这是一个用于查找数组中形成的最大数的程序 公共类解决方案实现了Comparator{ 公共字符串最大编号(最终列表A){ 清单B=A; StringBuilder str=新的StringBuilder(); 集合。排序(B,this); 对于(int i=B.size()-1;i>=0;i--){ str=str.append(B.get(i)); } return str.toString(); } 公共整数比较(整数X,整数Y){ 字符串XY=整数。toString(X); 字符串YX=Integer.toString(Y); 字符串QW=XY+YX; 字符串WE=YX+XY; 返回QW.compareTo(WE); } }

Java 函数返回的是00000而不是0。这是一个用于查找数组中形成的最大数的程序 公共类解决方案实现了Comparator{ 公共字符串最大编号(最终列表A){ 清单B=A; StringBuilder str=新的StringBuilder(); 集合。排序(B,this); 对于(int i=B.size()-1;i>=0;i--){ str=str.append(B.get(i)); } return str.toString(); } 公共整数比较(整数X,整数Y){ 字符串XY=整数。toString(X); 字符串YX=Integer.toString(Y); 字符串QW=XY+YX; 字符串WE=YX+XY; 返回QW.compareTo(WE); } },java,comparator,Java,Comparator,程序已编译,但输入为00000的测试用例数组失败。它表示函数返回00000而不是0。是否尝试按字母顺序排序?如果是这样的话,我会想象 public class Solution implements Comparator<Integer> { public String largestNumber(final List<Integer> A) { List<Integer> B = A; StringBuilder s

程序已编译,但输入为00000的测试用例数组失败。它表示函数返回00000而不是0。

是否尝试按字母顺序排序?如果是这样的话,我会想象

public class Solution implements Comparator<Integer> {

    public String largestNumber(final List<Integer> A) {
        List<Integer> B = A;
        StringBuilder str = new StringBuilder();
        Collections.sort(B,this);
        for (int i=B.size()-1; i >= 0; i--) {
            str = str.append(B.get(i));
        }
        return str.toString();
    }

    public int compare(Integer X, Integer Y) {
        String XY = Integer.toString(X);
        String YX = Integer.toString(Y);
        String QW = XY + YX;
        String WE = YX + XY;
        return QW.compareTo(WE);
    }
}
我会成功的


否则,我会从
Collections.sort()
行中删除此
,它应该按数字顺序进行排序。

让我们看看您的代码

  • 输入数组由00000组成。我猜这意味着一个由五个0组成的数组:
    [0,0,0,0]
  • 您正在通过比较方法对输入进行排序。在这种情况下,排序没有效果,因为我们在中只有0
  • 执行
循环的

public int compare(Integer X, Integer Y) {
    return X.toString().compareTo(Y.toString());
}
您正在迭代数组,并将数组的每个元素附加到字符串生成器
str
。因此,您附加0,0,0,0,0作为字符串
00000


这应该可以解释所看到的行为。例如,您可以尝试将字符串
00000
转换为int,然后返回该值。

您连接字符串,这很明显,您可能在开头有一些前导的重要零。这并不意外。要处理这些问题,请使用StringBuilder的at()方法进行迭代,以查找第一个非零字符,然后返回substring()方法的结果。只需记住也要考虑字符序列长度,以便在所有零的情况下,在调用substring()时索引最后一个字符。这样,根据排序方向,您可以从列表中生成最大或最小的数字。

为什么要返回字符串而不是int?我还建议您了解Integer和int之间的区别。代码中有一条注释:在Java中,变量名应始终以小写字母开头。同样
列表B=A
的作用可能与您认为的不同。您有一些非常令人困惑的变量名-XY只是X(考虑使用xs或sx-s作为字符串),YX只是Y,QW是XY(因为X和Y的concat),我们是YX。请阅读并相应地增强您的问题。
for (int i=B.size()-1; i >= 0; i--) {
  str = str.append(B.get(i));
}