如何反转打印字符串?

时间:2018-04-15 14:05:06

标签: java

我试图编写一个将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来完成代码。说实话,我很困惑。

非常感谢任何帮助。

3 个答案:

答案 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));
   }
 }
}

希望这会有所帮助。 祝你好运。