2011-06-01 70 views
1

我正在嘗試編寫一個程序來提示用戶輸入一個大於或等於2的int。從這個輸入中,程序必須計算並打印所有偶數整數在2和輸入的int之間。如果輸入的int低於2,它也必須產生一個錯誤消息。我已經爲它製作了一個程序,但它只是想知道你們是否可以找到更好的方法呢?我確定有,但我似乎無法找到一種可行的方法!計算偶數整數的更好方法

這裏就是我所做的:

import java.util.Scanner; 

public class EvenSum { 


     public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 

    System.out.println("Enter an integer which is above 2."); 
    int number = scan.nextInt(); 
    int divnum = number/2; 
    int divnum2 = divnum + 1; 
    int sumofeven = divnum * divnum2; 

    if(number >= 2) 
    System.out.println("The sum of the even integers between the number is "+ 
      sumofeven); 
    else 
     System.out.println("Invalid number entered."); 


    } 

} 
+0

這功課嗎? – tjm 2011-06-01 16:18:15

+1

可能更適合[代碼評論](http://codereview.stackexchange.com/),但我不確定。 – 2011-06-01 16:19:12

+0

@tjm no ..沒有冒犯,但我不會在六月份做作業。這是爲了準備考試,我正在嘗試編寫簡短的代碼片段來練習,但是沒有標記方案,所以我試圖從java中比我更擅長的人那裏獲得意見。 @Rob,它可能是..抱歉,我在這裏是新的。 – Jimmy 2011-06-01 16:21:03

回答

3

注:沒有一個真正背景用這個例子,它不是有效的。它只是顯示了一個更乾淨的做法。

// Check the input. 
    if (number >= 2) 
     System.out.println(sum(number)); 
} 

// Will find the sum if the number is greater than 2. 
int sum(int n) { 
    return n == 2 ? n - 2 : n % 2 == 0 ? n + sum(n - 2) : sum(n - 1); 
} 

希望這會有所幫助。哦,順便說一句,方法sum遞歸地添加數字。我不得不編輯答案。可能還有改進的空間。

+0

考慮到OP的答案在任何值爲'n'的情況下都能在不變的時間內工作,並且這個答案需要花費更多的時間,直到它得到一個甚至相當小的'n'的StackOverflowError,它並不是一個改進。 – 2011-06-01 20:06:56

+0

這是事實,它在內存使用方面效率較低,但它像大多數遞歸示例一樣以更簡單的方式呈現任務。 :)很難通過*更好的*來告訴提問者的意思,它可以是任何東西。 – whirlwin 2011-06-01 20:22:09

+1

那裏。我給它添加了一個註釋。 :) – whirlwin 2011-06-01 20:32:41

0
public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 

    System.out.println("Enter an integer which is above 2."); 

    int number = scan.nextInt(); 

    if (number >= 2) { 
     int sumofeven = 0; 
     for (int i = 2; i <= number; i += 2) { 
      sumofeven += i; 
     } 
     System.out.println("The sum of the even integers between the number is " + sumofeven); 
    } else { 
     System.out.println("Invalid number entered."); 
    } 
} 
+0

謝謝。這就是我想要做的事情......我實際上會嘗試這樣的事情,但並不認爲我可以在if-else語句中放置for循環(不知道爲什麼大聲笑)乾杯! – Jimmy 2011-06-01 16:27:53

1

爲什麼要使用循環?你計算的總和爲:

2 + 4 + ... n, where n is a positive even number. 

這是一個非常簡單的算術級數。

+0

最佳答案。 – bestsss 2011-06-01 21:15:31

2

爲什麼使用循環?你可以真正計算出來。設X是他們選擇的數字。假設N是最大的偶數< = X.(N^2 + 2 * N)/ 4將是你的答案。

編輯:剛剛看到我上面的答案。他是對的。我給了我想要的功能。