16.8 Locale(地区) Locale类被实例化以生成其中每一个描述一个地理或文化区域的对象。它是提供了编写在不同的国际环境下都能运行的程序的几个类之一。例如,用于显示各个区域的日期,时间和数字区别的格式设计。国际化是一个超过本书讨论范围的大课题。然而大多数的程序仅仅需要处理其中的一些基本要求,包括设置当前的地区。Locale类定义了下面的一些常数用于处理最常见的地区。 CANADA GERMAN KOREAN CANADA_FRENCH GERMANY PRC CHINA ITALIAN SIMPLIFIED_CHINESE CHINESE ITALY TAIWAN ENGLISH JAPAN TRADITIONAL_CHINESE FRANCE JAPANESE UK FRENCH KOREA US 例如,表达式Locale.CANADA代表了对应加拿大的Locale对象。 Locale的构造函数为: Locale(String language, String country) Locale(String language, String country, String data) 这些构造函数建立一个代表指定语言(language)和国家(country)的Locale对象。这些值必须包含ISO标准语言和国家代码。辅助浏览器和特定供应商的信息可以在data中提供。 Locale定义了几种方法。其中最重要的一种是setDefault( ),说明如下: static void setDefault(Locale localeObj) 它将默认区域设置为由localeObj指定的值。 其他的一些比较感兴趣的方法如下: final String getDisplayCountry( ) final String getDisplayLanguage( ) final String getDisplayName( ) 它们返回可用于显示国家名字,语言种类和对地区做完整描述的可读的字符串。通过使用getDefault( )方法可以获得默认的区域,说明如下: static Locale getDefault( ) Calendar 和GregorianCalendar 是按地区方式工作的类的例子。DateFormat 和SimpleDateFormat也与地区有关。 16.9 Random Random类是伪随机数的产生器。之所以称之为伪随机数是因为它们是简单的均匀分布序列。Random定义了下面的构造函数。 Random( ) Random(long seed) 第一种形式创建一个使用当前时间作为起始值或称为初值的数字发生器。第二种形式允许人为指定一个初值。如果用初值初始化了一个Random对象,就对随机序列定义了起始点。如果用相同的初值初始化另一个Random对象,将获得同一随机序列。如果要生成不同的序列,应当指定不同的初值。实现这种处理的最简单的方法是使用当前时间作为产生Random对象的初值。这种方法减少了得到相同序列的可能性。 由Random定义的公共方法列在表16-6中。 表16-6 由Random 定义的方法 方法 描述 boolean nextBoolean( ) 返回下一个布尔(boolean)随机数(在Java 2中新增加的) void nextBytes(byte vals[ ]) 用随机产生的值填充vals double nextDouble( ) 返回下一个双精度(double)随机数 float nextFloat( ) 返回下一个浮点(float)随机数 double nextGaussian( ) 返回下一个高斯随机数 int nextInt( ) 返回下一个整型(int)随机数 int nextInt(int n) 返回下一个介于0和n之间的整型(int)随机数(在Java 2中新增加的) long nextLong( ) 返回下一个长整型(long)随机数 void setSeed(long newSeed) 将由newSeed指定的值作为种子值(也就是随机数产生器的开始值)正如你能看到的,从Random对象中可以提取七种类型的随机数。从nextBoolean( )方法中可以获得随机布尔数。通过调用nextBytes( )方法可以获得随机字节数。通过调用nextInt( )方法可以获得随机整型数。通过调用nextLong( )方法可以获得均匀分布的长整型随机数。通过调用nextFloat( )和nextDouble( )方法可以分别得到在0.0到1.0之间的,均匀分布的float和double随机数。最后,调用nextGaussian( )方法返回中心在0.0,标准偏差为1.0的double值,这就是著名的钟型曲线。下面是一个说明由nextGaussian( )方法产生序列的例子。该程序得到100个随机高斯数值,并计算它们的平均值。该程序也统计落在正或负两种标准偏差,且对每一种分类按增量为0.5递增的值的个数,程序运行结果在屏幕上靠左(或靠右)用图形方式画出。 // Demonstrate random Gaussian values. import java.util.Random; class RandDemo { public static void main(String args[]) { Random r = new Random(); double val; double sum = 0; int bell[] = new int[10]; for(int i=0; i<100; i++) { val = r.nextGaussian(); sum += val; double t = -2; for(int x=0; x<10; x++, t += 0.5) if(val < t) { bell[x]++; break; } } System.out.println("Average of values: " + (sum/100)); // display bell curve, sideways for(int i=0; i<10; i++) { for(int x=bell[i]; x>0; x--) System.out.print("*"); System.out.println(); } } } 这里是程序运行的结果,正如你能看到的那样,结果获得了数字的一个钟型分布。 Average of values: 0.0702235271133344 ** ******* ****** *************** ****************** ***************** ************* ********** ******** ***
<<上一页
1
2
3
4
5
6
下一页>>
|