如何在数组中只打印偶数或奇数字符?

时间:2013-09-13 15:43:20

标签: java arrays for-loop

让我说我有字符串:'救火车'。然后我将该字符串分成单个字母并将它们放入一个名为T的数组中。所以现在T []看起来像{f,i,r,e,t,r,u,c,k}。我怎么才能打印偶数字符所以我的打印语句看起来像'frtuk'而奇怪的看起来像'ierc'。这是我到目前为止所得到的:

import java.util.Scanner;
import java.util.Arrays;
public class StringFun {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String even_odd = sc.next();
        char[] t = even_odd.toCharArray();
        System.out.println(Arrays.toString(t));

        //I can't get this next part to work.
        for(int i = t[0]; i < t.length; i = i + 2){
            System.out.println(Arrays.toString(t[i]));
        }
    }
}

9 个答案:

答案 0 :(得分:5)

代码中的一个小错误:

您不需要数组中的第一个值来初始化循环变量i,只需要索引值,您希望循环从。

要记住的一个棘手的事情是索引从0开始,但我们,人类从1开始计算。(我在第一次编辑答案时也犯了错误)所以当起始值为奇数时,将打印带有偶数序号的字符。

索引的开始是一个必须经常记住的常见问题...

此外,您可以直接打印字符,此处不需要Arrays.toString()方法:

System.out.println(t[index]);

够了。

奇怪的字符:i设置为0:这将打印第1个,第3个...字符

       for(int i = 0; i < t.length; i = i + 2){
            System.out.println(t[i]);
        }

甚至是chars:i设置为1:这将打印第2,第4 ...字符

       for(int i = 1; i < t.length; i = i + 2){
            System.out.println(t[i]);
        }

消除数组

此外,您甚至不需要创建char数组,可以使用String.charAt(int index)来实现此目的:

        String even_odd = sc.next();

        for(int i = 0; i < even_odd.length(); i = i + 2){
            System.out.println(even_odd.charAt(i));
        }

将其提升到新的水平

另外,为了更好,您可以将其提取到一个函数中,并重用该功能:

private static void printChars(String input, boolean even) {
        int i = 0;
        if(even) { //if we need the even chars, start from 1;
          i=1;
        }
        for(; i < input.length(); i = i + 2){
            System.out.println(input.charAt(i));
        }
}

然后你的主要方法就是这样:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String even_odd = sc.next();
        char[] t = even_odd.toCharArray();
        System.out.println(Arrays.toString(t));

        //calling the function for even numbers
        printChars(even_odd, true);

        //calling the function for odd numbers
        printChars(even_odd, false);
    }

请记住重复错误重用 - &gt;好

答案 1 :(得分:3)

使用0代替t[0]

开始循环
 for(int i = 0; i < t.length; i = i + 2){

目前i将保留102,其为字母f的ASCII值,并且由于条件而不会进入循环。

为什么i会保留char值,因为Widening primitive conversion - Java允许

  

char to int,long,float或double

答案 2 :(得分:1)

非常简单。只需输入if(i % 2 == 0)即可确定是否打印角色。

此外,不需要Arrays.toString(t[i])。将其更改为t[i]

答案 3 :(得分:0)

试试这个

 char[] arr={'f','i','r','e','t','r','u','c','k'};
 for(int i=0;i<arr.length;i++){
     if(i%2==1){
         System.out.print(arr[i]);
     }
 }

Out put

 ierc

即使

   char[] arr={'f','i','r','e','t','r','u','c','k'};
   for(int i=0;i<arr.length;i++){
    if(i%2==0){
     System.out.print(arr[i]);
     }
    }

Out put

 frtuk

答案 4 :(得分:0)

只是一个小错误!你很亲密这应该解决它。

 for(int i = 0; i < t.length; i = i + 2){

答案 5 :(得分:0)

你的for语句有错误,不是int i = t [0]但是应该是int i = 0;否则它将在阵列的污垢位置上取字符的ASCII值。

答案 6 :(得分:0)

这会遍历你的字符串并打印出你想要的东西。

 public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    String even_odd = sc.next();

    System.out.println("Odd Characters");
    for(int i = 0; i<even_odd.length(); i++){
        if(i%2==0){
            System.out.println(even_odd.charAt(i));
        }   
    }

    System.out.println("Even Characters");
    for(int i = 0; i<even_odd.length(); i++){
        if(i%2==1){
            System.out.println(even_odd.charAt(i));
        }   
    }
}

答案 7 :(得分:0)

试一下

<p id="basicExample"> 
    <tr>        
        <td class="right"><b>Start Time: </b></td>
        <td class="left">      

           <input type="text" name="StartDate" id="StartDate"  value="09/02/2016" class="date start" />
            <input type="text" name="StartTime" id="StartTime" value="2:00pm" size="20" class="time start"/>

        </td>
    </tr>
    <tr>
        <td class="right"><b>End Time: </b></td>
        <td class="left">                   
           <input type="text" name="EndDate" id="EndDate"  value="09/02/2016>"  class="date end"/>
            <input type="text" name="EndTime" id="EndTime" value="3:00pm" size="20"  class="time end"/>
        </td>
    </tr>
</p>

答案 8 :(得分:0)

import java.io. ; import java.util。;

公共类解决方案{

/**
 * 
 * @param args
 */
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 scanner = new Scanner(System.in);
    int totalStrings = scanner.nextInt();

    String nextString = null;
    while(scanner.hasNext()) {
        nextString = scanner.next();
        int stringsCount = totalStrings;
        Solution stringInterleaving = new Solution();
        int startIndexEven=0,incrementEven=2;
        int startIndexOdd=1,incrementOdd=2;
         int printedCharCountEven = 0;
        int printedCharCountOdd = 0;
        if(nextString!=null && nextString.length()>0) {
             printedCharCountEven =
                stringInterleaving.printChars(nextString, startIndexEven,incrementEven);
               if(printedCharCountEven>0) {
                 System.out.print(" ");
               }
            printedCharCountOdd =
                stringInterleaving.printChars(nextString, startIndexOdd,incrementOdd);
        }
        if(printedCharCountEven>0 || printedCharCountOdd>0) {
                System.out.println();
        }
    }
    if(scanner!=null) {
        scanner.close();   
    }
}

    /**
 * 
 * @param input
 */
private int printChars(String input,int startIndex,int increment) {
        int printedCharCount = 0;
        if(input!=null && input.length()>0) {
            for(int i=startIndex;i<input.length();) {
               System.out.print(input.charAt(i));
                i=i+increment;
                printedCharCount++;
            }
        }  
    return printedCharCount;
}

}