Java:可以使用单个for循环而不是两个?

时间:2017-06-07 02:49:50

标签: java arrays

我的代码如下。它首先从用户获取输入并反向打印。我是Java的新手。我通过使用两个for循环来实现这一目标。首先迭代输入,另一个for循环反向打印数字。我的问题是,是否有任何方法可以改进我的代码 - 也许只使用一个循环?任何建议表示赞赏。谢谢。

public static void main (String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int arr[] = new int[n];

    for (int arr_i = 0; arr_i < n; arr_i++) {
        arr[arr_i] = in.nextInt();
    }

    for (int reverse_i = n-1; reverse_i >= 0; reverse_i--) {
        System.out.print(arr[reverse_i]);

        if (reverse_i != 0) {
            System.out.print(" ");
        }
    }
}

示例输入:

4
1 2 3 4

预期产出:

4 3 2 1

5 个答案:

答案 0 :(得分:4)

使用StringBuilder并始终在0索引处插入。

  

请参阅:Oracle » JavaDocs » 1.7 » java.lang.StringBuilder.insert(int, int)

StringBuilder bld = new StringBuilder();

for (int arr_i = 0; arr_i < n; arr_i++) {
    int i = in.nextInt();
    bld.insert(0, i);
}

System.out.println(bld.toString());

答案 1 :(得分:2)

我发现最简单的方法是在这里使用String Builder:

Scanner in = new Scanner(System.in);
StringBuilder stringBuilder = new StringBuilder();
while (in.hasNext()) {
   stringBuilder.append(in.next());
   if(in.hasNext()) {
     stringBuilder.append(" ");
   }
}

System.out.print(stringBuilder.reverse());

答案 2 :(得分:1)

我不确定您的请求的要求,但您不一定要使用数组。您可以按相反的顺序将输入连接到String中。

public static void main(String[] args) {
    System in = new Scanner(System.in);
    int n = in.nextInt();
    String allNumbers = "";

    for (int i = 0; i < n; i++) {
        int current = in.nextInt();
        allNumbers = current + " " + allNumbers;
    }

    if(allNumbers != ""){
      allNumbers = allNumbers.substring(0,allNumbers.length()-1);
    }

    System.out.println(allNumbers);
}

答案 3 :(得分:1)

首先,您可以在将元素插入数组时将其反转。然后,假设您使用的是Java 8+,您可以使用IntStream而不是循环并使用基本收集器进行打印。像,

Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
IntStream.range(0, n).forEachOrdered(i -> arr[n - i - 1] = in.nextInt());
System.out.println(IntStream.of(arr).mapToObj(String::valueOf)
        .collect(Collectors.joining(" ")));

答案 4 :(得分:-1)

Java内置了String方法。如果您的输入是字符串,则可以使用以下 -

String s1 = new String("new");
String s2 = s1.reverse();
System.out.println(s2) // wen