1,产生各种类型的随机数:
public class RandomNumber{
public static void main(String[] args) {
//使用java.lang.Math的random方法生成随机数
System.out.println("Math.random(): " + Math.random()); //使用不带参数的构造方法构造java.util.Random对象
System.out.println("使用不带参数的构造方法构造的Random对象:");
Random rd1 = new Random();
// 产生各种类型的随机数
// 按均匀分布产生整数
System.out.println("int: " + rd1.nextInt());
// 按均匀分布产生长整数
System.out.println("long: " + rd1.nextLong());
// 按均匀分布产生大于等于0,小于1的float数[0, 1)
System.out.println("float: " + rd1.nextFloat());
// 按均匀分布产生[0, 1)范围的double数
System.out.println("double: " + rd1.nextDouble());
// 按正态分布产生随机数
System.out.println("Gaussian: " + rd1.nextGaussian()); //生成一系列随机数
System.out.print("随机整数序列:");
for (int i = 0; i < 5; i++) {
System.out.print(rd1.nextInt() + " ");
}
System.out.println(); //指定随机数产生的范围
System.out.print("[0,10)范围内随机整数序列: ");
for (int i = 0; i < 10; i++) {
// Random的nextInt(int n)方法返回一个[0, n)范围内的随机数
System.out.print(rd1.nextInt(10) + " ");
}
System.out.println();
System.out.print("[5,23)范围内随机整数序列: ");
for (int i = 0; i < 10; i++) {
// 因为nextInt(int n)方法的范围是从0开始的,
// 所以需要把区间[5,28)转换成5 + [0, 23)。
System.out.print(5 + rd1.nextInt(23) + " ");
}
System.out.println();
System.out.print("利用nextFloat()生成[0,99)范围内的随机整数序列: ");
for (int i = 0; i < 10; i++) {
System.out.print((int) (rd1.nextDouble()* 100) + "/");
// System.out.println("数学:"+(int)(Math.random()*100));
}
System.out.println();
System.out.println(); //使用带参数的构造方法构造Random对象
// 构造函数的参数是long类型,是生成随机数的种子。
System.out.println("使用带参数的构造方法构造的Random对象:");
Random ran2 = new Random(10);
// 对于种子相同的Random对象,生成的随机数序列是一样的。
System.out.println("使用种子为10的Random对象生成[0,10)内随机整数序列: ");
for (int i = 0; i < 10; i++) {
System.out.print(ran2.nextInt(10) + " ");
}
System.out.println();
Random ran3 = new Random(10);
System.out.println("使用另一个种子为10的Random对象生成[0,10)内随机整数序列: ");
for (int i = 0; i < 10; i++) {
System.out.print(ran3.nextInt(10) + " ");
}
System.out.println();
// ran2和ran3生成的随机数序列是一样的,如果使用两个没带参数构造函数生成的Random对象,
// 则不会出现这种情况,这是因为在没带参数构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数。 //另外,直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类
}
}
2.小数点的精确度
publicstaticdouble round(double value, int scale,int roundingMode) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(scale, roundingMode);
double d = bd.doubleValue();
bd = null;
return d;
}
publicstaticvoid main(String[] argc) {
//下面都以保留2位小数为例
//ROUND_UP
//只要第2位后面存在大于0的小数,则第2位就+1
System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
//ROUND_DOWN
//与ROUND_UP相反
//直接舍弃第2位后面的所有小数
System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
//ROUND_CEILING
//如果数字>0则和ROUND_UP作用一样
//如果数字<0则和ROUND_DOWN作用一样
System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
//ROUND_FLOOR
//如果数字>0则和ROUND_DOWN作用一样
//如果数字<0则和ROUND_UP作用一样
System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
//ROUND_HALF_UP [这种方法最常用]
//如果第3位数字>=5,则第2位数字+1
//备注:只看第3位数字的值,不会考虑第3位之后的小数的
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
//ROUND_HALF_DOWN
//如果第3位数字>=5,则做ROUND_UP
//如果第3位数字<5,则做ROUND_DOWN
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
//ROUND_HALF_EVEN
//如果第3位是偶数,则做ROUND_HALF_DOWN
//如果第3位是奇数,则做ROUND_HALF_UP
System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
}
3建立与数据库的连接并将查询结果以表格的形式显示出来
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl="jdbc:odbc:mydb"; //mydb是我建立的access数据源
Connection conn=DriverManager.getConnection(dburl);
Statement stml=conn.createStatement();
//以上四条语句也可以改写为下面这四条语句,用来建立与数据库的连接:
// String dburl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\db1.mdb";
// Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Connection conn = DriverManager.getConnection(dburl);
// Statement stml = conn.createStatement();
Vector rows = newVector();//用于存储数据库中的行信息
Vector columnHeads = newVector(); //用于存储数据库中的列标题
try{
ResultSet rs=stml.executeQuery("select * from student");
boolean moreRecords = rs.next();//定位到达第一条记录,这句话一定要写
ResultSetMetaData rsmd = rs.getMetaData(); //获得rs结果集中列属性信息
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
columnHeads.addElement(rsmd.getColumnName(i)); //获得列名(将列名存放至向量columnHeads)
do
{
rows.addElement(getNextRow(rs, rsmd)); //获取下一行记录
}
while (rs.next());//利用循环获得所有记录
JTable jTable = new JTable(rows, columnHeads);//将获得的行列数据信息作为参数重新构造表格视图
jTable.setSize(new Dimension(383, 81));
JScrollPane scroller = new JScrollPane(jTable);//创建带有滚动条的面板,并将表格视图加入
f2.add(scroller, BorderLayout.CENTER);//将面板重新加入溶器中
f2.validate(); //验证此容器及其所有子组件
while(rs.next()){
String ss=rs.getString("id");//显示输出结果
String s2=rs.getString("name");
System.out.println(ss+s2);
}
rs.close();
stml.close();
conn.close(); //使用完后要记得关闭所有连接
}catch(Exception ee){System.out.println(ee);}
//另外还要写一个getnextrow函数,用来获取下一行的数据
public Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd)throws SQLException //该方法获取下一行记录
{
Vector currentRow = newVector(); //定义一个向量,用于存放记录
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
currentRow.addElement(rs.getString(i));//获取记录
return currentRow;//返回记录
}