簡體   English   中英

使用unicode值打印char(java)

[英]print char using unicode value (java)

下面的代碼返回? 而不是一個隨機的角色。 有任何想法嗎? 請注意,我寫了這個作為方法重載的練習,因此“復雜”的設置。

class TestRandomCharacter
{
    public static void main(String[] args) 
    {
        char ch =  RandomCharacter.getRandomCharacter() ;
        System.out.println(ch);

    }//end main

}

class RandomCharacter 
{
    public static char getRandomCharacter(char ch1, char ch2)
    {
        return (char)(ch1 + Math.random() * ( ch2 - ch1 )) ;
    }

    public static char getRandomCharacter()
    {
        return getRandomCharacter('\u0000','\uFFFF') ;
    }
}

您的代碼正在打印控制台或其字體無法顯示的字符。

使用隨機類代替Math.random()。 (但是如果您沒有安裝擴展映射,則在提示命令中,您無法看到unicode字符,但只能看到ascii)

您可以使用Random對象的.nextInt()方法獲取整數。

例:

如果您想要一個從1到40的隨機數,可以這樣寫:

Random numRandom = new Random();
int n = numRandom.nextInt(40) + 1; // nextInt(40) give a number from 0 to 39

你可以將它們轉換為ascii:

(字符)((int)(Math.abs(ch1 + Math.random()*(ch2-ch1))%128))

應該在控制台上僅顯示0-127之間的ascii字符。

如前所述,您的控制台,編碼和字體有問題。

然而:
您的實現有時會返回未定義的字符,因為並非char的每個值都是有效的unicode字符。 Character.isDefined(char ch)檢查是否在Unicode中定義了char。 一個快速的解決方案可能看起來像這樣,但是當對隨機過程使用錯誤的邊界(僅包含無效的char值)時,當然可以無限運行。

public static char getRandomCharacter(char ch1, char ch2)
    {
     while (true)
     {
      char ch=(char)(ch1 + Math.random() * ( ch2 - ch1 )) ;
      if (Character.isDefined(ch)) {return ch;};
     }
    }

暫無
暫無

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

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