【发布时间】: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