提问人:Ayan 提问时间:11/13/2022 更新时间:11/13/2022 访问量:49
传递了错误的参数值
wrong argument value is passed
问:
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)
答:
0赞
Yossi Benagou
11/13/2022
#1
您需要在函数中声明变量。String binS = ""
rawBinary
Using 导致使用函数创建的先前值被保存。static String binS = ""
rawBinary
评论
rawBinary
reverse
main
-->rawBinary
-->reverse