繁体   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