在最后一个元素之后删除 space " "

Removing space " " after last element

扩展至:

有人可以给我一个 hint/solution 我怎么能更改代码,所以在最后一个输出数字之后它不会添加 space?

import java.io.*;
import java.util.*;
public class Main {
  public static void main(String[] args) {
   Scanner in = new Scanner(System.in);
 int[] productsAndCustomers = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
 int[] hind = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); 
 int[] raha = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

    for (int m : raha) {
        int largest = Integer.MIN_VALUE;
        for (int p : hind) {
            if (p > largest && p <= m) {
                largest = p;
            }
        }
        System.out.print(largest + " ");
    }
  }
}

虽然它显示了正确的答案,但必须是它不会显示最后一个输出数字之后的间距。最好的选择是什么?

您可以创建一个变量 space 并在第一次迭代后用 space 初始化它,如下所示:

String space = "";
for (int m : raha) {
    //Your code...
    System.out.print(space + largest);
    space = " ";
}

好主意是使用 StringBuilder - 您可以使用方法 append() 来添加所有 largest 并且在 for 循环之后您可以使用它的 delete() 方法来获取去掉最后一个字符。

我建议只使用常规循环,而不是增强的 for 循环,这样您就可以知道何时检查 raha 数组的最后一个元素。

尝试:

for(int i = 0; i < raha.length; i++) {
    // Your code
    if(raha[i] != raha.length - 1)
        System.out.println(largest + " ");
    else
        System.out.println(largest);
}

如果你使用的是Java 8,那么有一个简单的方法:不是立即打印结果,而是将它们收集到一个集合中,然后使用String.join方法:

List<String> results = new ArrayList<>();
for (int m : raha) {
    int largest = Integer.MIN_VALUE;
    for (int p : hind) {
        if (p > largest && p <= m) {
            largest = p;
        }
    }
    results.add(Integer.toString(largest));
}
System.out.println(String.join(" ", results));

如果您不使用 Java 8,那么您将不得不使用一些提供类似 join 方法的第三方库。

如果您不想收集结果,则必须跟踪索引(因此使用常规 for 循环而不是外部 foreach)并省略最后一个索引的 space。

您可以使用 for 循环遍历数组并实现简单的 if 检查以查看当前迭代是否是最后一次:

if (i == array.length - 1)
    System.out.print(element);
else
    System.out.print(element + " ");

还有很多不同的方法,这是我能记住的最简单的方法之一。