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());
}
}
我仍然收到以下错误。
我该如何纠正?
答案 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()函数在空格前给出字符,而下一行给出整行。
它会很好。