Java,从嵌套的 for 循环生成的单独行中删除重复的输出



我是java的新手,我有一个程序,它从用户那里获取一个1到10之间的数字,并显示该数字的乘法表。这是代码:

import java.util.Scanner; //importing the scanner library
public class question3 {
  public static void main(String[] args){
    Scanner keyb = new Scanner(System.in);
    System.out.print("Enter an integer between 1 and 10: ");
    int userNumber = keyb.nextInt();
    while (userNumber <= 0 || userNumber >= 10){
      System.out.print("Enter an integer between 1 and 10: ");
      userNumber = keyb.nextInt();
    }
    keyb.close();
    for (int counter = 1; counter <= userNumber; counter++){
      System.out.print(counter + "t");
      for (int number = 2; number <= userNumber; number++){
        System.out.print((counter * number) + "t");
      }
      System.out.println(" ");
    }
  }
}

因此,如果用户输入 4,输出将如下所示:

1    2    3    4
2    4    6    8
3    6    9    12
4    8    12   16

这行得通。我需要使用乘法表并删除任何重复的数字。因此,如果用户输入 4,所需的输出将如下所示:

1    2    3   4
     4    6   8
          9   12
              16

当重复输出仅存在于 for 循环打印语句中时,如何删除它?

谢谢!

    Set<Integer> generatedNumbers = new HashSet<>();
    for(int counter = 1; counter <= userNumber; counter+=1)
    {
        System.out.print((generatedNumbers.contains(counter) ? "" : counter) + "t");
        generatedNumbers.add(counter);
        for(int number = 2; number <= userNumber; number+=1)
        {
            int product = number * counter;
            System.out.print((generatedNumbers.contains(product) ? "" : product) + "t");
            generatedNumbers.add(product);
        }
        System.out.println();
    }

您需要一个额外的List<Integer>来检查条件:(只需要对齐空格(DIY)

public class question3 {
public static void main(String[] args) {
    Scanner keyb = new Scanner(System.in);
    System.out.print("Enter an integer between 1 and 10: ");
    int userNumber = keyb.nextInt();
    while (userNumber <= 0 || userNumber >= 10) {
        System.out.print("Enter an integer between 1 and 10: ");
        userNumber = keyb.nextInt();
    }
    keyb.close();
    List<Integer> arr = new ArrayList<Integer>();
    for (int counter = 1; counter <= userNumber; counter++) {
        if (!arr.contains(counter)) {
            System.out.print(counter + "t");
            arr.add(counter);
        } else
            System.out.println("t");
        for (int number = 2; number <= userNumber; number++) {
            if (!arr.contains((counter * number))) {
                System.out.print((counter * number) + "t");
                arr.add((counter * number));
            } else {
                System.out.print("t");
            }
        }
        System.out.println("t");
    }
}

}

编辑:还要在这里利用do-while循环来避免重复的代码来询问输入,例如

System.out.print("Enter an integer between 1 and 10: ");
            int userNumber = keyb.nextInt();

最新更新