簡體   English   中英

System.err.print(ln) 與 system.out.println 在同一行? 爪哇

[英]System.err.print(ln) on the same line as a system.out.println? JAVA

我有一個 CLI 游戲,我必須為一個 uni 項目制作它,並且(我知道它的不好做法)希望以紅色打印生命。 我計划使用 System.err.print 以紅色打印紅心,但它們不會加入我的 System.out.print("") 輸出。 這是可能的還是我可以提供某種覆蓋功能?

使用代碼時; System.out.print("Player Lives: "); System.out.print("♥ ♥ ♥ ♥ ♥")我的輸出將與預期在同一行。 但是,當我將代碼更改為: System.out.print("Player Lives: "); System.err.print("♥ ♥ ♥ ♥ ♥")輸出將被分成兩行...

Netbeans IDE v12.0 ...任何幫助或想法將不勝感激!

謝謝!

如果紅心不代表錯誤,請不要將它們打印在錯誤流上。

你想要紅心,這很容易做到。 您需要了解一些有關控制台的知識(不要太多)以及在控制台上進行彩色打印意味着什么。

控制台是替代物理設備的程序。 在過去,控制台類似於連接到通信頻道的電視屏幕。 這個電視屏幕也有一個鍵盤。 控制台負責向“計算機”發送信息並從計算機接收數據(控制台控制代碼)並呈現該信息。

大多數發送和接收的數據都是文本。 今天,我們用程序模擬控制台,“tty 設備”是模擬通信通道(今天的設備文件,而不是調制解調器或串行線)。 當您鍵入時,數據將寫入連接到控制台的“tty”,當計算機顯示文本時,控制台讀取 tty 並顯示讀取的內容。

這對顏色很重要的原因是您需要在輸出中打印控制台控制代碼。 第一個控制台控制代碼是將控制台切換為顯示紅色文本,第二個是將控制台切換為顯示“正常”文本。 稍加研究,您就可以(輕松地)顯示 16 種不同的顏色,並結合 16 種不同的背景顏色、閃爍的文本等。一些控制台支持更多的“模式”操作,您可以自己試驗。 有一組標准模式,幾乎所有控制台都廣泛支持,稱為 ANSI 模式。

控制台的默認信息是文本,然后顯示為文本。 要讓控制台接受命令,它不會是純文本。

public static final String RED = "\u001B[31m"; 
public static final String RESET = "\u001B[0m";

第一個字符串會將控制台轉換為紅色文本,第二個字符串會將顏色模式重置為默認值。

所以要打印一個紅色的“你好”,你可以這樣做:

System.out.println(RED + "hello" + RESET);

你可以制作一個函數來打印紅色的東西

public void printRed(String message) {
   System.out.println(RED + message + RESET);
}

或構建“包裝”紅色字符串的函數等。

對此的簡單回答是:不要這樣做!

  1. 當您將輸出發送到 System.out 和 System.err 時,您無法控制輸出在“控制台”上顯示時的交錯方式。 交織將取決於許多不受Java 程序控制的因素

  2. 您也許可以利用 IDE 的“功能”,即在其控制台窗口中以紅色顯示System.err輸出,但您會發現它在其他上下文中不起作用1 例如,來自典型的命令外殼。

  3. 通常可以讓控制台以不同的顏色輸出文本。 然而,這依賴於控制台來支持(通常) ANSI Escape Codes 這些不一定在您的最終用戶的控制台/終端/終端模擬器上啟用。 如果它們沒有被啟用,用戶會在他們的屏幕上看到一堆奇怪的東西。

有辦法解決這個問題(例如使用 Java 終端庫),但總會有一些粗糙的地方。 例如,如果您的講師/助教運行您的應用程序,捕獲輸出並嘗試使用(比如說) less來查看它,他們可能會看到奇怪的東西而不是顏色。

我的建議:除非是輸出彩色文本(以及像“♥”這樣的 dingbat 字符)的特定作業要求……否則不要這樣做。 您正在使您的作業變得更加困難,並且如果您在講師/助教用來運行和標記您的代碼的上下文中沒有做對的話,您就會失去分數。

(你可能會爭辯說這是學習做的一件有用的事情。我的反對意見是它沒有你想象的那么有用。現在大多數應用程序使用 GUI 框架或 Web 瀏覽器來實現它們的用戶界面。基於控制台接口通常被視為過時的。)


1 - 我注意到您的評論,您的講師希望獲得整個 NetBeans 項目,並將在同一 IDE 中運行代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM