【问题标题】:How do I print just the even or odd chars in an array?如何仅打印数组中的偶数或奇数字符?
【发布时间】:2013-09-13 15:43:20
【问题描述】:

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

【问题讨论】:

    标签: java arrays for-loop


    【解决方案1】:

    只是代码中的一个小错误:

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

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

    索引的开始是一个非常普遍的问题,人们必须时刻牢记......

    另外,你可以直接打印字符,这里不需要Arrays.toString()方法:

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

    够了。

    奇数字符:i 设置为 0:这将打印第一个、第三个 ... 字符

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

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

    【讨论】:

      【解决方案2】:

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

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

      目前i 将持有102 是字母f 的ASCII 值,并且它不会因为条件而进入循环。

      为什么i 会持有char 值,为此请参阅Widening primitive conversion - Java,它允许

      char 转换为 int、long、float 或 double

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          试试这个

          奇数

           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
          

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

                这将遍历您的字符串并打印出您想要的内容。

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

                【讨论】:

                • 你或许应该向他解释为什么会这样做
                【解决方案8】:

                试试这个

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

                【讨论】:

                • 已经有一个非常详细的已接受答案。你的回答没有添加任何新内容。
                【解决方案9】:

                导入 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;
                }
                

                }

                【讨论】:

                  猜你喜欢
                  • 2017-10-23
                  • 2022-11-25
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-06-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-06-24
                  • 1970-01-01
                  相关资源
                  最近更新 更多