如何在Java中打印字符串数组的偶数和奇数位置字符?

时间:2017-05-23 13:06:27

标签: java string loops

问题

  

给定一个长度为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

非常感谢所有的帮助和指导,并提前感谢!

15 个答案:

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

我已经通过两种方式解决了这个问题,并且都产生了正确的输出。

看看,如果有任何问题,请告诉我。

  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
  1. 不需要额外的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