用Java格式化表格

用Java格式化表格,java,format,tabular,Java,Format,Tabular,这是本作业的主要步骤。创建嵌套循环以打印出 如果输入有效,则以表格格式显示数字。第一个输入i定义了数字 行数,第二个输入j定义列数。在回路内部, 写代码列出从1到i*j的正数。使用 System.out.printf()函数,用于 整数和字符串 我需要打印出来 设置表的大小和数据类型(键入'Q'或'Q'退出): 3 4“数字” |1234 ------------------- 1 | 1 2 3 4 2 | 5 6 7 8 3 | 9 10 11 12 在我设置了列数和行数之后,我只能得到

这是本作业的主要步骤。创建嵌套循环以打印出 如果输入有效,则以表格格式显示数字。第一个输入i定义了数字
行数,第二个输入j定义列数。在回路内部, 写代码列出从1到i*j的正数。使用
System.out.printf()
函数,用于 整数和字符串

我需要打印出来

设置表的大小和数据类型(键入'Q'或'Q'退出): 3 4“数字”

  • |1234
-------------------

1 | 1 2 3 4

2 | 5 6 7 8

3 | 9 10 11 12

在我设置了列数和行数之后,我只能得到内部表,而不能得到外部表或星数。 为了让它正确显示,我不得不修改它,但它应该排列整齐

    Scanner scan = new Scanner(System.in);
    String stringIn;

    do
    {
        System.out.print("Set the size of table and data-type(Type Q or q to quit)");
        stringIn = scan.nextLine();
        int space = stringIn.indexOf(" ");
        int spaceTwo = stringIn.indexOf(" ", space+1);

        if(stringIn.length()>4)
        {

            String firstNum = stringIn.substring(0,space);
            String secondNum = stringIn.substring(space+1,spaceTwo);
            String dataType = stringIn.substring(spaceTwo+1);
            int firstInt = Integer.parseInt(firstNum);
            int secondInt = Integer.parseInt(secondNum);

            if (!stringIn.equals("Q")&&!stringIn.equals("q")&&firstInt>=0&&secondInt>=0)
            {
                System.out.println(stringIn.substring(0,space) + " " + stringIn.substring(space+1,spaceTwo) + " " + stringIn.substring(spaceTwo+1));
            }
            else if(firstInt<0||secondInt<0)
            {
                System.out.println("Try again. The input was invalid");
            }
            for(int i = 1; i <firstInt+1; i++)
            {
                for (int j = 1; j < secondInt+1; j++)
                {
                    System.out.printf("%4d", i*j);
                    System.out.printf("%4s", i*j);
                }
                System.out.println();
            }
        }

    }
    while(!stringIn.equals("Q")&&!stringIn.equals("q"));
Scanner scan=新的扫描仪(System.in);
弦弦;
做
{
System.out.print(“设置表的大小和数据类型(键入Q或Q以退出)”);
stringIn=scan.nextLine();
int space=stringIn.indexOf(“”);
int spaceTwo=stringIn.indexOf(“,空格+1);
如果(stringIn.length()>4)
{
String firstNum=stringIn.substring(0,空格);
String secondNum=stringIn.substring(空格+1,空格2);
字符串数据类型=stringIn.substring(spaceTwo+1);
int firstInt=Integer.parseInt(firstNum);
int secondInt=Integer.parseInt(secondNum);
如果(!stringIn.equals(“Q”)&&!stringIn.equals(“Q”)&&firstInt>=0&&secondInt>=0)
{
System.out.println(stringIn.substring(0,空格)+“”+stringIn.substring(空格+1,空格2)+“”+stringIn.substring(空格2+1));
}

否则,如果(firstInt非常接近,则与嵌套循环中的逻辑稍有出入。这是我修改的:

1) 将列标签移到内部循环之外

2) 创建了用于单元格值的计数器

3) 使用计数器打印单元格值,然后将其递增

代码:


谢谢,这是一个很大的帮助,但是我如何让最上面的一行显示“*| 1 2 3 4”(行号)”------“下面有一个除法器,我用循环上方的两个
System.out.println
语句更新了答案,应该可以得到你想要的!谢谢,但我想得到的是,如果我选择使表超过4列,它会随着表的增长而增长,而且我不知道如何获得输出,最上面的一行需要是一个列计数器,所以如果有3,它将上升到4,5到5等。啊,我的坏,是静态思考,再次更新,现在应该是正确的。
String headerRow= " * |"; 
String spacer = "-----";
for(int i=1; i<secondInt + 1; i++){headerRow+="   "+i; spacer+="----";}
System.out.println(headerRow);
System.out.println(spacer);
int counter = 1;
for (int i = 1; i < firstInt + 1; i++) {
    System.out.printf("%4s", i + " |");
    for (int j = 1; j < secondInt + 1; j++) {
        System.out.printf("%4d", counter);
        counter++;
    }
    System.out.println();
}
> 4 5 numbers  
* |   1   2   3   4   5
> -------------------------  
1 |   1   2   3   4   5  
2 |   6   7   8   9  10  
3 |  11  12  13  14  15  
4 |  16  17  18  19  20