用于反转字符串的输出未按预期进行

时间:2015-12-19 14:52:19

标签: java string

  

Chandu是个坏学生。一旦他的老师要求他打印给定字符串的反向。他花了三个小时来解决它。老师在Chandu激动不已,问你同样的问题。你能解决吗?

输入

第一行包含一个整数T,表示测试用例的数量。 每个测试用例包含一个字符串S,仅包含小写字母。

输出

对于每个测试用例,打印字符串S的反向。

约束

1< = T< = 10 1< = | S | < = 30

 Input                      Sample Output(Plaintext Link)

 2
 ab                          ba
 aba                         aba

时间限制

每个输入文件1秒。

内存限制

256 MB

来源限制

1024 KB

MyApproach1

MyApproach2

要反转字符串,我使用XOR逻辑来反转字符串。

@Edit

public static void main(String args[] ) throws Exception
{
    Scanner sc = new Scanner(System.in);
    int T = sc.nextInt();
    for (int i = 1; i <= T; ++i)
    {
        String input = sc.next();
        int len = input.length();
        StringBuilder input1 = new StringBuilder(len);

        int end = input.length()-1;
        int start = 0;
        while (start<end)
        {
            input1.setCharAt(start,input.charAt(start)^input.charAt(end));
            input1.setCharAt(end,input.charAt(end)^input.charAt(start));
            input1.setCharAt(start,input.charAt(start)^input.charAt(end));

            ++start;
            --end;
        }
        System.out.println(input1.toString());
    }
}

我仍然收到以下错误。

我该如何纠正?

2 个答案:

答案 0 :(得分:1)

对于方法1,您需要做的就是删除对sc.nextLine()的调用,一切都会好的。这是因为每一行都包含一个&#34;令牌&#34;即一个由空格分隔的单词。 sc.next()将返回的是什么。在此之后无需致电nextLine()

对于您的方法2,您应该仔细阅读API documentation of StringBuilder。这将向您展示如何从StringBuilder创建String,反之亦然。 (每当我编写Java代码时,我都会在浏览器窗口中显示API文档,以便在编辑器窗口旁边快速参考。它非常有用。)

编辑(在最新编辑问题之后):

存在编译问题和运行时问题。首先,XOR运算符生成int类型的结果,即使其操作数是char。因此,您应该将表达式放在括号中并将其转换为char。一旦你完成了这个,你就会得到一个运行时错误,因为你试图索引一个尚不存在的StringBuilder的元素。当你像这样创建StringBuilder时:

StringBuilder input1=new StringBuilder(len);

len是初始容量。 StringBuilder实例的值最初是&#34;&#34;。然后调用setCharAt(),但StringBuilder的当前大小为0,因此您将获得索引越界异常。您需要使用字符串本身初始化StringBuilder:

StringBuilder input1=new StringBuilder(input);

现在你没有获得异常,但你会得到错误的答案。这是因为您的XOR逻辑存在问题。

答案 1 :(得分:0)

之后

sc.nextInt();

sc.nextLine();

在开始第一个循环之前。 对于代码的两行

String s1 = sc.next();
sc.nextLine();

只写

String s1 = sc.nextLine();

next()函数在空格前给出字符,而下一行给出整行。

它会很好。