2

假设我有字符串:'救火车'。例如,我将该字符串拆分为单个字母,并将它们放入一个名为 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]));
        }
    }
}
4

9 回答 9

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]);
        }

偶数字符:设置i为 1:这将打印第二个、第四个...字符

       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);
    }

记住重复是不好的重用 --> 好

于 2013-09-13T15:45:08.460 回答
3

0用而不是开始你的循环t[0]

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

当前i将保留102letter 的 ASCII 值f,并且由于该条件,它不会进入循环。

为什么i会持有一个char值,请参见Widening primitive conversion - Java which allows

char 到 int、long、float 或 double

于 2013-09-13T15:45:53.253 回答
1

很简单。只需输入一个if(i % 2 == 0)来确定是否打印字符。

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

于 2013-09-13T15:46:34.493 回答
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]);
     }
 }

输出

 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]);
     }
    }

输出

 frtuk
于 2013-09-13T15:46:12.597 回答
0

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

 for(int i = 0; i < t.length; i = i + 2){
于 2013-09-13T15:47:37.123 回答
0

你在 for 语句上有一个错误,不是 int i = t[0] 而是应该是 int i = 0; 否则它将在数组的脏位置上取字符的 ASCII 值。

于 2013-09-13T15:47:37.307 回答
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));
        }   
    }
}
于 2013-09-13T15:48:20.123 回答
0

试试这个

public class char_odd_even {

    public static void main(String arg[]){

        Scanner sc = new Scanner(System.in);

        String s;
        s = sc.next();

        char char_array[];

        char_array=s.toCharArray();
        int a[] = new int[char_array.length];

        for(int i=0;i<char_array.length;i++)
        {
            a[i]=s.charAt(i);

            if(a[i]%2==0){
                System.out.println((char)a[i]+" EVEN CHAR " + a[i]);
            }
            else{
                System.out.println((char)a[i]+" ODD CHAR " + a[i]);
            }

        }

    }

}
于 2016-09-02T21:10:54.397 回答
0

导入 java.io。; 导入 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;
}

}

于 2018-03-25T05:09:44.323 回答