问题
给定一个长度为N的字符串S,它从0到N-1索引,在单行上打印它的偶数索引和奇数索引字符作为2个空格分隔的字符串。 假设输入从索引位置0开始(被认为是偶数)
输入
第一行包含一个整数T(测试用例数)。 T后续行的每一行包含一个字符串S,
输出
对于每个字符串S,打印它的偶数索引字符,后跟空格,后跟奇数索引字符。
示例输入
2
哈克
等级
示例输出
Hce akr
Rn ak
我写的代码
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 akr
Rn ak
问题
正如您所看到的,我的程序成功地满足了测试用例和其他测试用例(使用自定义输入),但每次HackerRank编译器都告诉我我的程序不符合测试用例。
显然,我的程序正在产生所需的输出,但每次HackerRank编译器告诉我我的解决方案有误。
有谁能告诉我我在哪里犯了错误?
进一步修改
然后我决定将最后3行的print语句改为一个语句,如下所示:
System.out.println(strE + " " + strO);
但是,这次程序没有产生所需的输出,而是打印了一些垃圾值,如下所示:
[C @ 5c3f3b9b [C @ 3b626c6d
[C @ 3abc8690 [C @ 2f267610
我的怀疑
1。在第一种情况下,当我使用2个打印语句分别打印两个字符串时,我每次都得到正确的输出,但是HackerRank编译器拒绝了它。的为什么吗 的
2。在第二种情况下,当我通过使用一个print语句而不是3来修改程序来获得所需的结果时,程序给出了完全不同的输出和相当打印的垃圾值!的为什么吗 的
以下是有关HackerRank问题的链接,以获取更多信息: hackerrank.com/challenges/30-review-loop
非常感谢所有的帮助和指导,并提前感谢!
答案 0 :(得分:2)
尝试提交:
Scanner scan = new Scanner(System.in);
int T = scan.nextInt();
scan.nextLine();
for (int i = 0; i < T; i++) {
String myString = scan.nextLine();
String even = "";
String odd = "";
for (int j = 0; j < myString.length(); j++) {
if (j % 2 == 0) {
even += myString.charAt(j);
} else {
odd += myString.charAt(j);
}
}
System.out.println(even + " " + odd);
}
我得到正确的输出,它应该满足所有要求。我认为你的代码失败了,因为它不是你最后打印的真实字符串而你的数组中有空位
答案 1 :(得分:1)
我可以解决你的第二个问题: ---&GT; System.out.print(strE); - &gt;在底部,调用该方法(public void print(char s []));
- &gt; System.out.println(strE +“”+ strO); - &gt;在底部,调用该方法(public void println(String x))
答案 2 :(得分:1)
对于你的第一个回答我无法回答你,因为我不知道编译器是如何工作的,但我可以回答你的第二个问题。
System.out.print(strE); System.out.print(" "); System.out.println(strO);
之所以有效,是因为System.out.print(char[])
和System.out.println(char[])
会在打印之前自动将char数组转换为可读字符串。
但是,在第二种情况System.out.println(strE + " " + strO);
中,您正在做的是直接将char数组转换为字符串,这只打印数组对象的类和哈希码,因为toString()
方法是不在数组类中重写。你想要做的是System.out.println(new String(strE) + " " + new String(strO));
。它会给你你想要的结果。
答案 3 :(得分:1)
$res['name of it]
答案 4 :(得分:1)
int T = scan.nextInt();
这将读取我们将要处理的测试用例的数量。
String string[] = new String[T];
for(int i = 0; i<T; i++){
string[i] = scan.next();
} 接下来我们创建一个名为“string”的数组(BTW,这是变量/对象的坏名称),其大小为T,并且在for循环中从输入T读取测试用例并将它们保存在数组中。
for(int temp = 0; temp<T; temp++){
现在,对于每个测试用例,我们都会执行以下操作...
for(int j = 0; j<string[temp].length(); j = j+2)
{
System.out.print(string[temp].charAt(j));
}
我们创建一个局部变量j,它只在这个for循环中可见。 j保存我们正在处理的字符串索引(= string [temp])。因此,我们在位置j上打印一个字符(通过使用String类的标准方法“charAt”,返回字符串的给定索引的字符)然后将其增加2.因此,此代码将打印每个偶数字符。对于字符串“example”,它将打印“eape”(j = 0,j = 2,j = 4,j = 6)。
System.out.print(" ");
用空格分隔序列。
for(int j = 1; j<string[temp].length(); j = j+2){
System.out.print(string[temp].charAt(j));
}
System.out.println();
我们正在做同样的事情(创建索引j,运行字符串的所有字符),但是从“1”开始,所以它将打印字符串的所有奇数字符。对于字符串“example”,它将为您提供“xml”(j = 1,j = 3,j = 5)。在此之后,它将结束字符串。我希望,它会帮助你理解。 :)
答案 5 :(得分:1)
我已经通过两种方式解决了这个问题,并且都产生了正确的输出。
看看,如果有任何问题,请告诉我。
可以使用String代替使用char数组
//char[] even = new char[10000];
String even = "";
让我们看一下代码
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
String s = scanner.next();
char[] array = s.toCharArray();
int count=0;
//char[] even = new char[10000];
//char[] odd = new char[10000];
String even = "";
String odd = "";
for(char ch : array){
if(count%2 == 0){
even = even + ch;
}else{
odd = odd + ch;
}
count++;
}
count = 0;
System.out.println(even + " " + odd);
}
输出:
hacker
hce akr
不需要额外的char []或String来存储偶数和奇数位置字符,我们可以使用适当的条件直接打印它们。
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args){
String s = scanner.next();
char[] array = s.toCharArray();
int count=0;
for(char ch : array){
if(count%2 == 0){
System.out.print(ch);
}
count++;
}
count = 0;
System.out.print(" ");
for(char ch : array){
if(count%2 != 0){
System.out.print(ch);
}
count++;
}
count = 0;
}
输出:
hacker
hce akr
答案 6 :(得分:1)
尝试一下:
public static void main(String[] args) {
System.out.println("Enter string to check:");
Scanner scan = new Scanner(System.in);
String T = scan.nextLine();
String even = "";
String odd = "";
for (int j = 0; j < T.length(); j++) {
if (j % 2 == 0) { //check the position of the alphabet by dividing it by 0
even += T.charAt(j);
} else {
odd += T.charAt(j);
}
}
System.out.println(even + " " + odd);
scan.close();
}
答案 7 :(得分:1)
from allauth.account.auth_backends import AuthenticationBackend
class MyAuthenticationBackend(AuthenticationBackend):
def authenticate(self, request, **credentials):
user = super().authenticate(request, **credentials)
if user.custom_field == True:
return user
else:
return None
}
答案 8 :(得分:1)
导入 java.util.*;
公共类解决方案{
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
while(n>0) {
String str=scan.next();
for(int i=0;i<str.length();i++) {
if(i%2==0) {
System.out.print(str.charAt(i));
}
}
System.out.print(" ");
for(int i=0;i<str.length();i++) {
if(i%2==1) {
System.out.print(str.charAt(i));
}
}
n--;
System.out.println();
}
}
}
答案 9 :(得分:0)
import java.io.*;
import java.util.*;
public class Solution {
private static void f(String s) {
// TODO Auto-generated method stub
char c[]=s.toCharArray();
int i,j;
for (i = 0; i <c.length;i++){
System.out.print(c[i]);
i+=1;
}
System.out.print(" ");
for (j = 1; j<c.length;j++){
System.out.print(c[j]);
j+=1;
}
}
public static void main(String[] args){
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int s=sc.nextInt();
while(hasNext()){
//for loop for multiple strings as per the input
for(int m=0;m<= s;m++){
String s1=sc.next();
f(s1);
System.out.println();
}
}
}
}
答案 10 :(得分:0)
** JavaScript version **
function processData(input) {
for (let i = 1; i < input.length; i++) {
printOutput(input[i]);
}
}
function printOutput(input) {
var result = [];
input.length % 2 == 0 ? result[input.length / 2] = ' ': result[Math.ceil(input.length / 2)] = ' ';
for (let i = 0; i < input.length; i++) {
if (i % 2 == 0) {
result[i / 2] = input[i];
}
else {
result[Math.ceil(input.length / 2) + Math.ceil(i / 2)] = input[i];
}
}
console.log(result.join(''));
}
process.stdin.on("end", function () {
processData(_input.split('\n'));
});
答案 11 :(得分:0)
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int T;
T = s.nextInt();
String[] str = new String[T];
int i;
for(i=0;i<T;i++) {
str[i] = s.next();
}
for(i=0;i<T;i++) {
char[] even = new char[5000];
char[] odd = new char[5000];
int ev =0,od=0;
for(int j= 0;j< str[i].length();j++) {
if(j%2== 0) {
even[ev] = str[i].charAt(j);
ev++;
}else {
odd[od] = str[i].charAt(j);
od++;
}
}
String strEven = new String(even);
String strOdd = new String(odd);
System.out.print(strEven.trim());
System.out.print(" ");
System.out.println(strOdd.trim());
}
s.close();
}
}
我确信这可以正常工作。您忘了将其转换为字符串,而且还增加了字符数组的大小
答案 12 :(得分:0)
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan= new Scanner(System.in);
int n= scan.nextInt();
for(int i=0;i<n;i++){
String s= scan.next();
int len= s.length();
StringBuffer str_e= new StringBuffer();
StringBuffer str_o= new StringBuffer();
for(int j=0;j<len;j++){
if(j%2==0)
str_e= str_e.append(s.charAt(j));
if(j%2==1)
str_o= str_o.append(s.charAt(j));
}
System.out.println(str_e+" "+str_o);
}
}
}
答案 13 :(得分:0)
尝试一下:
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner pp=new Scanner(System.in);
int n=pp.nextInt();
for(int i=0; i<n; i++)
{
String ip=pp.next();
String re1="",
re2="";
for(int j=0; j<ip.length(); j++)
{
if(j%2 == 0)
{
re1+= ip.charAt(j);
}
if(j%2 == 1)
{
re2+= ip.charAt(j);
}
}
System.out.print(re1+" "+re2);
System.out.println("");
}
}
}
答案 14 :(得分:0)
public class PrintCharacters{
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int noOfTestCases = sc.nextInt();
sc.nextLine();
String []inputStrings= new String[noOfTestCases];
for(int i=0;i<noOfTestCases;i++) {
inputStrings[i]=sc.nextLine();
}
for(String str: inputStrings) {
String even ="";
String odd ="";
for(int i=0;i<str.length();i++) {
if(i%2==0) {
even+=str.charAt(i);
}else {
odd+=str.charAt(i);
}
}
System.out.println(even+" "+odd);
}
sc.close();
}
}
Input:
2
Hacker
Rank
Output:
Hce akr
Rn ak