int num = 0; long time = 0; int sum = 0; public void Sum() { time = System.currentTimeMillis(); while(true) { if(num < 0) { num = -1; return; } if(num % 2 != 0) { sum += num; } num--; if(num == 0) { break; } } time = System.currentTimeMillis() - time;
System.out.println("NUM中把有奇数和:" + time + "---把用时间为:" + time); }
你创建一个新的类,然后在main方法里调用不就行了。
public class RepeatTest { public static void main(String[] args) { int k = 77; OddSum[] oddSums = { new ForOddSum(), new WhileOddSum(), new RecursiveOddSum(), new MathOddSum() }; for(int i = 0; i < oddSums.length; i++) { System.out.println( oddSums[i].getClass().getSimpleName() + ": " + oddSums[i].sum(k) ); } } }interface OddSum { public int sum(int num); }abstract class AbstractOddSum implements OddSum { public int sum(int num) { if(num % 2 == 0) { num--; } return oddSum(num); } protected abstract int oddSum(int num); }class ForOddSum extends AbstractOddSum { protected int oddSum(int num) { int result = 0; for(int i = 1; i <= num; i += 2) { result += i; } return result; } }class WhileOddSum extends AbstractOddSum { protected int oddSum(int num) { int result = 0; while(num > 0) { result += num; num -= 2; } return result; } }class RecursiveOddSum extends AbstractOddSum { protected int oddSum(int num) { return innerSum(num, 0); }
private int innerSum(int num, int result) { if(num < 0) { return result; } result += num; return innerSum(num - 2, result); } }class MathOddSum extends AbstractOddSum { protected int oddSum(int num) { int k = (num + 1) / 2; return k * k; } }
上面最后一个有点问题,改正一下:class MathOddSum extends AbstractOddSum { protected int oddSum(int num) { if(num < 1) { return 0; } int k = (num + 1) / 2; return k * k; } }
哎,还是不大好,改正之:abstract class AbstractOddSum implements OddSum { public int sum(int num) { if(num < 1) { return 0; } if(num % 2 == 0) { num--; } return oddSum(num); } protected abstract int oddSum(int num); }
if(n<0){
return -1;
}
int sum=0;
double l=System.currentTimeMillis();
for(int i=0;i<n;i++){
if(i%2!=0){
sum+=i;
}
}
double ll=System.currentTimeMillis();
System.out.println("It needs time:"+(ll-l));
System.out.println(sum);
return sum;
}
应该有等于号的,不好意思。。
long time = 0;
int sum = 0;
public void Sum()
{
time = System.currentTimeMillis();
while(true)
{
if(num < 0)
{
num = -1;
return;
}
if(num % 2 != 0)
{
sum += num;
}
num--;
if(num == 0)
{
break;
}
}
time = System.currentTimeMillis() - time;
System.out.println("NUM中把有奇数和:" + time + "---把用时间为:" + time);
}
int k = 77;
OddSum[] oddSums = {
new ForOddSum(), new WhileOddSum(),
new RecursiveOddSum(), new MathOddSum()
};
for(int i = 0; i < oddSums.length; i++) {
System.out.println(
oddSums[i].getClass().getSimpleName() + ": " +
oddSums[i].sum(k)
);
}
}
}interface OddSum {
public int sum(int num);
}abstract class AbstractOddSum implements OddSum {
public int sum(int num) {
if(num % 2 == 0) {
num--;
}
return oddSum(num);
}
protected abstract int oddSum(int num);
}class ForOddSum extends AbstractOddSum {
protected int oddSum(int num) {
int result = 0;
for(int i = 1; i <= num; i += 2) {
result += i;
}
return result;
}
}class WhileOddSum extends AbstractOddSum {
protected int oddSum(int num) {
int result = 0;
while(num > 0) {
result += num;
num -= 2;
}
return result;
}
}class RecursiveOddSum extends AbstractOddSum {
protected int oddSum(int num) {
return innerSum(num, 0);
}
private int innerSum(int num, int result) {
if(num < 0) {
return result;
}
result += num;
return innerSum(num - 2, result);
}
}class MathOddSum extends AbstractOddSum {
protected int oddSum(int num) {
int k = (num + 1) / 2;
return k * k;
}
}
protected int oddSum(int num) {
if(num < 1) {
return 0;
}
int k = (num + 1) / 2;
return k * k;
}
}
public int sum(int num) {
if(num < 1) {
return 0;
}
if(num % 2 == 0) {
num--;
}
return oddSum(num);
}
protected abstract int oddSum(int num);
}