传递了错误的参数值

wrong argument value is passed

提问人:Ayan 提问时间:11/13/2022 更新时间:11/13/2022 访问量:49

问:

public class decimalToBinary {

    static String reversedBin="";
    static String binS = "";

    static String rawBinary(int x) {
        if (x == 0) {
            return binS = binS + "";
        }

        return binS = binS + x%2 +rawBinary(x / 2);
    }

    static String reverse(String x, int y) {
        if(y==0) {
            return reversedBin = reversedBin+ x.charAt(0);
        }
        return reversedBin = reversedBin + x.charAt(y) + reverse(x,y-1);
    }

    public static void main(String[] args) {
        int d = 100;     
        int x=rawBinary(d).length()-1;
        System.out.println(reverse( rawBinary(d) , rawBinary(d).length()-1 ));
        
    }
}

这里变量 x(in main) 值是 6,这是正确的,但是当我在 system.out.println ==> (rawBinary(d).length()-1) 中编写同样的东西时,它给出的值 510,这是不正确的。 我知道我不能把x放在system.out.println而不是rawBinary(d).length()-1中。 但是我想知道它给出错误的原因。

当我尝试将 x 放入 print 语句中时,它工作正常。但是我想知道它给出错误的原因。

错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 510 out of bounds for length 63
        at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
        at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
        at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
        at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
        at java.base/java.lang.String.checkIndex(String.java:4570)
        at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46)
        at java.base/java.lang.String.charAt(String.java:1527)
        at decimalToBinary.reverse(decimalToBinary.java:18)
        at decimalToBinary.main(decimalToBinary.java:25)
Java 语法错误

评论

0赞 Yossi Benagou 11/13/2022
你能解释一下你写的代码的目的吗?我看到你的代码在做什么,我试图理解你想要实现什么。
0赞 Jon Skeet 11/13/2022
请注意,您的方法似乎依赖于以前的结果 - 目前尚不清楚它试图做什么或为什么。(同上。rawBinaryreverse
0赞 Ayan 11/13/2022
rawBinary 方法将十进制转换为二进制(不可反转),反向方法只需反转值即可获得正确的二进制值。
0赞 Ayan 11/13/2022
main-->rawBinary-->reverse

答:

0赞 Yossi Benagou 11/13/2022 #1

您需要在函数中声明变量。String binS = ""rawBinary

Using 导致使用函数创建的先前值被保存。static String binS = ""rawBinary