几个简单的java小程序,求教更简单的方法!

雪域迷影 2010-10-01 02:57:21
以下是我学习java时老师布置的实验报告,
我自己全都做完了,想看看大家的做法,
有没有更简便的,忘大家对我的代码指教一二,
谈谈自己的看法,贴贴自己写的更优的代码,谢谢了!

1.编写Java程序,利用下面这个公式,计算出π的近似值,要求误差小于1e-8。
π/4=1-1/3+1/5-1/7+...
提示:关于数学方法参考api文档的Math类。

//PI.java
public class PI{
public static void main(String [] args){

final double eps =0.00000001,MAX = 100000000;
double result = 0, result1 = 0;
int i = 1; //i表示第几项
do{

result = result1;//用result保存当前计算的PI值

result1 += Math.pow(-1,i+1) /(double)(2*i-1); //将每项和累加result中
//更新PI值
i++;

}while(Math.abs(result1 - result) > eps && i <= MAX); //控制精度在eps之内

System.out.println( "PI的值为:PI = " + 4 * result);
}


}



2.写一个会随机生成25个范围在0~99之间的整型值的程序,对每一个值,用if-else if-else语句判断其大于、小于还是等于上一个随机生成的值。
提示:随机方法参考api文档的Math类。关于输出格式见下图:

//Random.java
import java.util.*;
public class Random{

public static void main(String args[]){
int[] RInt = new int[25]; //为整型数组对象分配内存空间
Random randomInts = new Random();

for(int i = 0; i < 25; i++){
//RInt[i] = (int)(99 * Math.random());
RInt[i] = randomInts.nextInt(100);
//System.out.println("第" + (i+1) + "随机数是:" + RInt[i]);
if(i == 0){ //第一个随机整数直接输出,之前没有整数
System.out.println("第1次" + RInt[i] );
}
else{ //判断第(i+1)个整数与第i个整数的大小关系
if(RInt[i] < RInt[i-1]){
System.out.println("第" + (i+1) + "次" + RInt[i] + " < " + RInt[i-1] );
}
else if(RInt[i] > RInt[i-1]){
System.out.println("第" + (i+1) + "次" + RInt[i] + " > " + RInt[i-1] );
}
else{
System.out.println("第" + (i+1) + "次" + RInt[i-1] + " == " + RInt[i] );
}
}

}




}




}




3.输出101到200以内的所有质数(素数)。
//Primer.java

public class Primer{


public static void main(String args[]){


for(int i = 101; i <= 200; i++){ //第一个for循环控制i数的范围
for(int j = 2; j <= Math.floor(Math.sqrt(i)) ; j++){ //第二个for循环判断i是否为素数
if(i % j ==0){
//System.out.println(i + "不是素数!");
break;
}
if ( j == Math.floor(Math.sqrt(i)))
System.out.println(i + "是素数!");

}



}





}




}


4.编写方法,实现矩阵相加、相乘的功能。
其中矩阵相加的方法可以声明成:
public static int [][] add(int [][] a, int [][] b)
矩阵相乘的方法可以声明为:
public static int [][] mul(int [][] a, int [][] b)

最后编写main方法,构造几组适当的矩阵数据,测试上面两个方法。
// MatrixCalculate.java

public class MatrixCalculate{

public static int [][] add(int [][] a, int [][] b){ //实现矩阵加法运算的方法


int c[][] = new int[a.length][a[0].length];
for(int i = 0 ; i< a.length ; i++)
for(int j = 0 ; j < a[0].length ; j++){

c[i][j] = a[i][j] + b[i][j];

}
return c;


}

public static int [][] mul(int [][] a, int [][] b){ //实现矩阵乘法的方法
int c[][] = new int[a.length][b[0].length];


for(int i = 0 ; i< a.length ; i++)
for(int j = 0 ; j < a[0].length ; j++){
for(int k = 0 ; k < a[0].length ; k++)
c[i][j] += a[i][k] * b[k][j] ;

}
return c;


}

public static void main(String [] args){

int a[][] = { {1,0,0}, {0,1,0} , {0,0,1} };
int b[][] = { {1,1,1}, {2,2,2} , {3,3,3} };

int AddResult[][] = new int[3][];
int MulResult[][] = new int[3][];
AddResult = add(a,b);
MulResult = mul(a,b);
System.out.println("*********实现矩阵加法**********");
for(int i = 0 ; i< a.length ; i++)
for(int j = 0 ; j < a[0].length ; j++){

System.out.println("AddResult[" + i +"]" + "[" + j +"] = " + AddResult[i][j] );


}

System.out.println("*********实现矩阵乘法************");
for(int i = 0 ; i< a.length ; i++)
for(int j = 0 ; j < b[0].length ; j++){

System.out.println("MulResult[" + i +"]" + "[" + j +"] = " + MulResult[i][j] );


}







}





}


5.实现一个排序算法(任选一种)。
方法声明如下:
public static void sort(int [] a)
编写main方法,测试你的排序算法。
//BubbleSort.java

public class BubbleSort{

public static void sort(int [] a){
for(int i = 0 ; i< a.length - 1 ; i++){
for(int j = i + 1 ; j < a.length ; j++){
if(a[i] > a[j]){
int temp = a[i] ;
a[i] = a[j] ;
a[j] = temp ;

}


}


}

}

public static void main(String [] args){
int [] a ={10,20,25,9,15,30,5,8,16,19} ;
sort(a);
for(int i = 0; i < a.length ; i++){
System.out.println("The sorted Number Array is: " + a[i] );

}


}




}


6.实现二分搜索算法。
方法声明如下:
public static int binSearch(int [] a, int key)
其中如在数组a中找到key值,返回相应的下标值,若找不到,则返回-1。
编写main方法,构造适当的有序数组,测试该方法。
//BinarySearch.java

public class BinarySearch{

public static int binSearch(int [] a, int key){
int left = 0;
int right = a.length - 1;
int middle ;
while(left <= right){

middle = (left + right) / 2;
if(a[middle] == key){

return middle;
}
else if(key < a[middle]){

right = middle ;
}
else{

left = middle ;

}


}

return -1;

}

public static void main(String [] args){

int [] a = new int[10];
for(int i =0 ; i < 10 ; i++){
a[i] = i + 10;

}
System.out.println(binSearch(a,13));

}





}
...全文
296 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
colaice2009 2010-10-01
  • 打赏
  • 举报
回复
那个二分法有点小问题。
else if(key < a[middle]){

right = middle ;
}
else{

left = middle ;

}


前面比较过相等了,这里就不必在赋值为相等了。
「已注销」 2010-10-01
  • 打赏
  • 举报
回复
计算 PI 的程序也有问题

在计算结果后加上一句测试代码即可测出实际偏差

System.out.println("误差:"+(Math.PI-4 * result));

运行结果显示:
PI的值为:PI = 3.1415926335902506
误差:1.9999542466564435E-8

差不多是题目要求误差值的2倍吧
「已注销」 2010-10-01
  • 打赏
  • 举报
回复
fix:
计算平方值,应该是计算平方根

另:
计算平方根前,还可以再增加一个判定条件,即平方根小于3的奇数,也就是小于9的奇数 (5,7) 均是素数
「已注销」 2010-10-01
  • 打赏
  • 举报
回复
关于素数的算法,有很大优化余地

1.每次循环判断都计算 sqrt 值,效率严重低下
2.除了2之外,其实只要判断奇数即可

public static void main(String[] args) {
// 除了2,所有素数都是奇数
for (int n = 101; n <= 200; n += 2)
if (isPrimer(n))
System.out.println(n + " 是素数");
}

static boolean isPrimer(int n) {
// 根据素数的定义,只有大于1的整数才有意义
if (n <= 1)
throw new IllegalArgumentException();
// 2,3是素数
if (n < 4)
return true;
// 如果是大于2的偶数,则肯定不是素数
if ((n & 1) == 0)
return false;
// 计算平方值
int max = (int) Math.sqrt(n);
// 从3开始计算是否可以被整除
for (int i = 3; i <= max; i += 2)
if (n % i == 0)
return false;// 如果可以整除,则不是素数
return true;
}

雪域迷影 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zxingchao2009 的回复:]
写得挺好的
[/Quote]
呵呵,我之前学过C语言,C++,感觉java和C++大体上差不多,
上手也就容易多了!
不过感觉自己还是得认真学,像数据结构、算法那方面,
得用心看!
t663800523 2010-10-01
  • 打赏
  • 举报
回复
看不懂
UPC_思念 2010-10-01
  • 打赏
  • 举报
回复
写得挺好的
Inhibitory 2010-10-01
  • 打赏
  • 举报
回复
求pi的这个可以找规律:

public class Test {
public static void main(String[] args) {
// π/4=1/1 - 1/3 + 1/5 - 1/7 + ...
// 分母每次加2,每项的符号,如果前一项是正,则当前项为负,如果前一项是负,当前项为正,即乘上-1
final double eps = 1e-8;
double quarterPi = 0;
double sum = 1.0;
int x = 3;
int flag = -1;

while (Math.abs(sum - quarterPi) > eps) {
quarterPi = sum;

sum += flag * 1.0 / x;
x += 2;
flag *= -1;
}

System.out.println(quarterPi * 4);
}
}

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧