我试图编写一个将int转换为二进制文件的程序。到目前为止,我已打印出剩余部分,但必须反向打印才能成为合适的二进制文件。我不允许使用任何方法。
这是我的代码。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter A Postive Number:");
int i = sc.nextInt();
int j = i; //backup
int k = 0; //remainder
while (j != 0) {
k = j % 2;
j /= 2;
String reversedStr = "";
switch (k) {
case 0:
reversedStr += "0";
break;
case 1:
reversedStr += "1";
break;
case 2:
reversedStr += "2";
break;
case 3:
reversedStr += "3";
break;
case 4:
reversedStr += "4";
break;
case 5:
reversedStr += "5";
break;
case 6:
reversedStr += "6";
break;
case 7:
reversedStr += "7";
break;
case 8:
reversedStr += "8";
break;
case 9:
reversedStr += "9";
break;
case 10:
reversedStr += "A";
break;
case 11:
reversedStr += "B";
break;
case 12:
reversedStr += "C";
break;
case 13:
reversedStr += "D";
break;
case 14:
reversedStr += "E";
break;
case 15:
reversedStr += "F";
break;
}
for (int l = reversedStr.length() - 1; l >= 0; l--) {
reversedStr.charAt(i);
System.out.print(reversedStr.charAt(l));
}
}
System.out.println("done");
}
}
这段代码给了我
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 178
at java.lang.String.charAt(String.java:658)
at radixHandmade.Handmade.main(Handmade.java:73)
底部的for循环是反转部分,但我不知道如何使用charAt来完成代码。说实话,我很困惑。
非常感谢任何帮助。
答案 0 :(得分:1)
此声明导致问题:
reversedStr.charAt(i);
除了导致异常之外(因为你试图在字符串中获取(最初输入的)第 - 个字符,这超出了字符串的边界,除非该值恰好是0),它没有其他副作用。
只需删除此行。
答案 1 :(得分:0)
删除行<meta-data
android:name="io.fabric.ApiKey"
android:value="bddb9792335804f5fee7" />
将解决问题,但程序仍然无法正确转换为二进制文件。你的字符串仍然需要反转。我建议使用getAccessTokenResponse
类:
$access_token = Socialite::driver($provider)->getAccessTokenResponse($token);
$user = Socialite::driver($provider)->userFromToken($access_token['access_token']);
如果你将while循环中的reverse for for循环移出,那么你的代码可以正常工作:
reversedStr.charAt(i)
但是我真的不明白为什么你甚至不得不扭转字符串,如果你可以这样做:
StringBuilder
如果你坚持只使用二进制文件会更好,你可以跳过整个开关并执行
import java.util.Scanner;
import java.lang.StringBuilder;
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder out = new StringBuilder();
System.out.println("Enter A Postive Number:");
int i = sc.nextInt();
int r = 0;
int b = 2; // now you can just change this for what base (binary, hex, ...)
while (i != 0) {
r = i % b;
i /= b;
switch (r) {
case 0:
out.append("0");
break;
case 1:
out.append("1");
break;
}
}
System.out.println(out.reverse());
}
}
答案 2 :(得分:0)
import java.util.Scanner;
public class Reverse {
public static void main(String[] args){
userInput();
}
public static void userInput(){
Scanner console = new Scanner(System.in);
String reverseString = console.nextLine(); //This is the word to be written backwards.
int s = reverseString.length()-1; //length of the word.
for (int i = s ; i>=0; i--){
System.out.print(reverseString.charAt(i));
}
}
}
希望这会有所帮助。 祝你好运。