1

我想在光标在下部写一些东西后将光标移到开头。我的意思是有像 SetCursorPosition(0,0) 这样的东西吗?

编辑:它是关于编写带有数字的 6x3 矩阵。应该是这样的

     ...
     7 8 9
     4 5 6
     1 2 3

它将从底部开始写入。当光标位于 (0,0) 时,它会放置 6x 空格然后写入 1 2 3,然后转到 (0,0),放置 5x 空格,然后写入 4 5 6 ...

代码:

boolean sa;        
    int yoyo;
    int lo = 18;
    int y = 0;

    for (int k = 1; k < 100; k++)
    {

        if (y < 18)
        {
            sa = true;
            for (int h = 2; h < k; h++)
            {
                if (k % h == 0)
                    sa = false;
            }
            if (sa)
            {
                lo--;

                if (y % 3 == 0)
                {
                    yoyo = lo / 3 + 1;
                    // here where I need Console.SetCursorPosition(0,0)

                    for (int yos = 0; yos < yoyo; yos++)
                    {
                        System.out.print("\n");
                    }
                    if (k < 10)
                        System.out.print(" " + k + " ");
                    else
                        System.out.print(k + " ");
                }
                else
                {
                    if (k< 10)
                        System.out.print(" " + k + " ");
                    else
                        System.out.print(k + " ");
                }


                y++;

            }
        }

    }
4

2 回答 2

0

不幸的是,Java 没有完整的控制台支持。

你可以试试JLine

于 2013-10-26T13:54:54.373 回答
0

我询问了JLine的开发人员,您可以使用它来设置光标位置。

terminal.puts(InfoCmp.Capability.cursor_address, 0, 0);

这是一个使用它的小例子,作为额外的奖励,我将展示如何使光标不可见和可见。

import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.jline.utils.InfoCmp;

import java.io.IOException;

public class CursorStuff
{
    public static void main(String[] args) throws IOException, InterruptedException
    {
        int row = 10;
        int col = 40;
        Terminal terminal = TerminalBuilder.terminal();
        terminal.puts(InfoCmp.Capability.cursor_address, row, col);
        System.out.println("Here we start at row " + row + " col " + col);
        System.out.println("Now you see the cursor");

        Thread.sleep(2000);
        terminal.puts(InfoCmp.Capability.cursor_invisible);
        System.out.println("Now you don't!");

        Thread.sleep(2000);
        terminal.puts(InfoCmp.Capability.cursor_visible);
        System.out.println("And the cursor is back again.");

    }
}

确保在您的库中包含JansiJNA,否则您将得到一个哑终端,并且至少在 Windows 上无法使用这些函数,因为它需要这些函数来执行本机函数调用。

据我所知,这是完成此任务的最简单方法,因为我知道这是一个选项,我正在编写 C++ 并调用我使用 JNI 进行的那些本机函数调用。

于 2022-02-25T23:15:17.363 回答