问题
给定一个长度为 N 的字符串 S,索引从 0 到 N-1,将它的偶数索引字符和奇数索引字符作为 2 个空格分隔的字符串打印在一行上。假设输入从索引位置 0 开始(这被认为是偶数)
输入
第一行包含一个整数 T(测试用例数)。 T 个后续行中的每一行 i 都包含一个字符串 S。
输出
对于每个字符串 S,打印它的偶数索引字符,后跟空格,然后是奇数索引字符。
样本输入
2个
黑客
秩
示例输出
Hce阿克尔
Rnak
我写的代码
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int T = scan.nextInt();
scan.nextLine();
for(int i=0 ; i<T ; i++)
{
String myString = scan.nextLine();
int evn = 0,
odd = 0,
len = myString.length();
char strE[] = new char[50],
strO[] = new char[50];
for(int j=0 ; j<len ; j++)
{
if(j%2 == 0)
{
strE[evn] = myString.charAt(j);
evn++;
}
if(j%2 == 1)
{
strO[odd] = myString.charAt(j);
odd++;
}
}
System.out.print(strE);
System.out.print(" ");
System.out.println(strO);
}
}
我的输出
Hce阿克尔
Rnak
问题
如您所见,我的程序成功满足测试用例和其他测试用例(使用自定义输入),但每次 HackerRank 编译器都告诉我我的程序不满足测试用例。
显然,我的程序正在生成所需的输出,但每次 HackerRank 编译器都告诉我我的解决方案有误。
谁能告诉我哪里出错了?
进一步修改
然后我决定将打印语句的最后 3 行更改为一条语句,如下所示:
System.out.println(strE + " " + strO);
然而,这次程序 没有 产生所需的输出,而是打印了一些垃圾值,如下所示:
[C@5c3f3b9b [C@3b626c6d
[C@3abc8690 [C@2f267610
我的疑惑
1. 在第一种情况下,当我使用 2 个打印语句分别打印两个字符串时,我每次都得到正确的输出,但 HackerRank 编译器拒绝了它。 为什么?
2. 在第二种情况下,当我通过使用一条打印语句而不是 3 条打印语句来修改程序以获得所需的结果时,程序给出了完全不同的输出,而是打印了垃圾值! 为什么?
以下是 HackerRank 问题的链接以获取更多信息: hackerrank.com/challenges/30-review-loop
非常感谢所有帮助和指导,并提前致谢!
原文由 enigma6174 发布,翻译遵循 CC BY-SA 4.0 许可协议
这会读取我们将要处理的测试用例的数量。
接下来我们创建一个名为“string”的数组(顺便说一句,这对于变量/对象来说是一个糟糕的名称),它的大小为 T 并且在 for 循环中从输入 T 次读取测试用例并将它们保存在数组中。
现在,对于每个测试用例,我们执行以下操作……
我们创建了一个局部变量 j,它只在这个 for 循环中可见。 j 保存我们正在处理的字符串 (=string[temp]) 的索引。因此,我们在位置 j 上打印一个字符(通过使用 String 类的标准方法“charAt”,它返回给定字符串索引的字符)然后将其增加 2。因此,此代码将打印每个偶数字符。对于字符串“example”,它将打印“eape”(j=0、j=2、j=4、j=6)。
用空格分隔序列。
我们正在做同样的事情(创建索引 j,遍历字符串的所有字符),但是从“1”开始,所以它将打印字符串的所有奇数字符。对于字符串“example”,它将为您提供“xml”(j=1、j=3、j=5)。在此之后,它将结束字符串。我希望,它会帮助你理解。 :)