【问题标题】:Swap input and print output as column交换输入和打印输出作为列
【发布时间】:2020-05-01 03:53:30
【问题描述】:

我为自己设定了一项我无法完成的任务。需要帮忙。 我想要实现的是用户的输入数字应该成对交换,如果有逗号分隔的数字,下一个交换应该从新行输出。 就像我说:10000234567,10000234568,10000234569 那么输出应该是这样的:
01002043657,
01002043658,
01002043659

这是我的代码:

import java.util.Scanner;

public class SwapNumbersTest {

public static String swapPairs(String str) {
char[] arr = str.toCharArray();
for (int i = 1; i < arr.length; i += 2) {
  if(arr[i] == ','){
    i+=2;
  }
  char swap = arr[i];
  arr[i] = arr[i - 1];
  arr[i - 1] = swap;
}
return new String(arr);
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a comma separated numbers: ");
String str = sc.nextLine();
System.out.println(swapPairs(str));
}
}

我在想,如果有一个字符',',那么之前的所有数字都应该写入一个字符数组并从新行打印出来。你能告诉我,如何实现这样的事情吗?

我还注意到,如果输入的数字不是偶数,那么交换就可以完美地工作,如果输入的数字是偶数,',' 逗号就会乱七八糟。

【问题讨论】:

    标签: java arrays char swap


    【解决方案1】:

    以下是如何按照您的要求进行操作:

    public class SwapNumbersTest {
    
        public static String swapPairs(String inputString) {
            String swappedNumbers = "";
            String[] arrayOfNumbers = inputString.split(",");
            for (String str : arrayOfNumbers) {
                char[] arr = str.toCharArray();
                for (int i = 1; i < arr.length; i += 2) {
                    if (arr[i] == ',') {
                        i += 2;
                    }
                    char swap = arr[i];
                    arr[i] = arr[i - 1];
                    arr[i - 1] = swap;
                }
                swappedNumbers = swappedNumbers + new String(arr) + ",\n";
            }
            return swappedNumbers.stripTrailing().replaceAll(",$","");
        }
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter a comma separated numbers: ");
            String str = sc.nextLine();
            System.out.println(swapPairs(str));
            sc.close();
        }
    
    }
    

    如果您不想在行尾使用逗号,则可以使用以下命令进行简化:

            swappedNumbers = swappedNumbers + new String(arr) + "\n";
        }
        return swappedNumbers.stripTrailing();
    

    【讨论】:

    • 谢谢。但是我用的是java8,没有stripTrailing方法
    • 然后使用 trim()。
    • 很高兴我能帮上忙。这是一个非常奇怪的问题。
    • 认为我能够用我的知识解决它。我明白总有很多方法可以解决任何问题。感谢您的解决方案,它甚至解决了偶数和非偶数的情况。
    【解决方案2】:

    我不明白您到底想要什么,但要将逗号分隔的数字转换为数字数组,您可以执行以下操作。

    StringTokenizer st = new StringTokenizer(str, ",");
    Array<Integer> arr = new ArrayList<Integer>;
    
    while(st.hasMoreTokens()) {
        arr.add(Integer.parseInt(st.nextToken()));
    }
    

    完成此操作后,我认为您可以在整数数组中应用您的算法。

    【讨论】:

    • 当我应用这个时,没有交换,而是一个整数数组,就像我输入 12,12 输出是 [12, 12]。
    【解决方案3】:

    实现此目的的一种方法是使用 Split() 函数

    String[] arr = str.split(",");
    

    【讨论】:

    • 如果我有 char[] arr 而不是 String[] arr 怎么办?你的意思是我应该在 main 方法中使用它?
    • 没错,如果你处理每个 arr[index].toCharArray(),这将消除字符数组中的逗号
    • 无法在 main 方法中应用它。如果我在打印输出中调用函数,是否需要将结果转换为字符串数组?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2016-06-26
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    相关资源
    最近更新 更多