【问题标题】:wrong argument value is passed传递了错误的参数值
【发布时间】:2022-11-14 00:04:10
【问题描述】:
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)

【问题讨论】:

  • 你能解释一下你写的代码的目的吗?我看到你的代码在做什么,我试图了解你想要实现的目标。
  • 请注意,您的 rawBinary 方法似乎取决于以前的结果 - 目前还不清楚它试图做什么或为什么。 (同上reverse。)
  • rawBinary 方法将十进制转换为二进制(未反转), reverse 方法只是反转值以获得正确的二进制值。
  • main-->rawBinary-->reverse

标签: java syntax-error


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2015-10-08
    相关资源
    最近更新 更多