我的代码如下。它首先从用户获取输入并反向打印。我是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
答案 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