题目是:尝试开发一个程序,获取2-32之间(不包括32)的6个偶数,并取得这6个偶数的和我编了如下的程序,结果运行以后发现不对劲,应该是有6个偶数的也不是,最后得到的数也不是6个数之和,不知是哪里出错了,请哪位大侠帮帮忙,看我哪里理解错了,谢谢
//import java.math.*;
public class UseCase1 {public static int GetEvenNum(double num1,double num2){
int sum=0;
for(int i = 0;i<6;i++)
{
int s=(int)num1+(int)(Math.random()*(num2-num1));
if(s%2==0){
System.out.println("本次所得偶数为:"+s);
}
sum=sum+s;
}
return sum;
}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println("任意6个2~32之间的偶数之和为:"+GetEvenNum(2,32));
}}

解决方案 »

  1.   

    int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    这里你得到了一个随机数,但是这个随机数可能是个奇数,所以下面一句
    if(s%2==0){ 
    System.out.println("本次所得偶数为:"+s); 

    判断是不是偶数时就跳过了,所以结果当然不可能得到6个偶数啦~
      

  2.   

    //import java.math.*; 
    public class UseCase1 { public static int GetEvenNum(double num1,double num2){ 
    int sum=0; 
    for(int i = 0;i <6;i++) 

    int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    if(s%2==0){ 
    System.out.println("本次所得偶数为:"+s); 

    else
    {
      i=i-1;
      continue;
    }

    sum=sum+s; 

    return sum; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO 自动生成方法存根 
    System.out.println("任意6个2~32之间的偶数之和为:"+GetEvenNum(2,32)); 
    } }
      

  3.   

    真心感谢上面两位高手指点,刚开始学Java,还有很多地方搞不明白,周围又没什么人懂,正在苦恼,没想到在这里可以得到指点,真是感觉柳暗花明又一村呢!呵呵!
      

  4.   

    (int)num1 + (int)(Math.random()*(num2-num1)是取得[num1,num2)之间的随机数,这里的随机数可能是奇数,甚至有可能是全是奇数,
    ((int)num1+(int)(Math.random()*(num2-num1))/2 得到 [num1/2,num2/2)之间的随机数,然后(((int)num1+(int)(Math.random()*(num2-num1))/2)*2 的得到是[num1,num2)之间的偶数随机数
      

  5.   

    這個i--很關鍵的..或者不需要這個i--也可以,, ,把for循環裏面的i++去掉,在你if(s%2==0)這個if條件的最後,加上i++,就相當於是說在你滿足是偶數的時候,i才自增一個,才執行下一次循環,個人覺得LZ是不是還差個判斷呢.? 你是2-32的偶數對吧,,不能保證下一次生成的隨機數跟前幾次的無重複吧..  推薦用個數組,把每次生成的隨機偶數存在數組裏面,當下次生成的時候,要做一個對數組索引的判斷..,判斷此次生成的隨機數是否與前幾次的有相同,  當此次生成的隨機數是偶數 並且跟前幾次生成的數是不相同的時候,才做i++,否則繼續生成隨機數.. 代碼就不附啦..思路已經給的很清晰了..!呵呵
      

  6.   

    问题在注释中说明了://import java.math.*; 
    public class UseCase1 { public static int GetEvenNum(double num1,double num2){ 
    int sum=0; 
    for(int i = 0;i <6;i++)  //在这里面你循环六次,希望得到六个偶数。但是下面获取随机数的时候,如果不是偶数也会算作一个循环,所以你不能得到六个偶数,除非你每次生成的随机数都是偶数。

    int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    if(s%2==0){ 
    System.out.println("本次所得偶数为:"+s); 

    sum=sum+s;   //这里面你想把偶数进行相加,但是你没有把他放到if(s%2==0)的判断语句里面,所以会把全部随机数相加,而不是只有整数。 

    return sum; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO 自动生成方法存根 
    System.out.println("任意6个2~32之间的偶数之和为:"+GetEvenNum(2,32)); 
    } }
      

  7.   

    问题在注释中说明了://import java.math.*; 
    public class UseCase1 { public static int GetEvenNum(double num1,double num2){ 
    int sum=0; 
    for(int i = 0;i <6;i++)  //在这里面你循环六次,希望得到六个偶数。但是下面获取随机数的时候,如果不是偶数也会算作一个循环,所以你不能得到六个偶数,除非你每次生成的随机数都是偶数。

    int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    if(s%2==0){ 
    System.out.println("本次所得偶数为:"+s); 

    sum=sum+s;   //这里面你想把偶数进行相加,但是你没有把他放到if(s%2==0)的判断语句里面,所以会把全部随机数相加,而不是只有整数。 

    return sum; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO 自动生成方法存根 
    System.out.println("任意6个2~32之间的偶数之和为:"+GetEvenNum(2,32)); 
    } }
      

  8.   

    public class UseCase1 { public static int GetEvenNum(double num1,double num2){ 
    int sum=0; 
    for(int i = 0;i <6;i++) 

    int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    if(s%2==0){ 
    System.out.println("本次所得偶数为:"+s); 

    sum=sum+s; 

    return sum; 

    /////
    我觉得FOR循环有问题,循环6次,拿不到6个偶数
    应该用do-whileint s=0;
    for(int i = 0;i <6;i++) 

    do
    int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    while(s%2!=0);
    System.out.println("本次所得偶数为:"+s); 
    sum=sum+s; 

      

  9.   

    楼主的代码的问题楼上的高手们已经解答了...
    按楼主的给的问题,没考虑偶数重复,我的代码:
    public class GetSixEven {
    public static void main(String[] args) {
    int x;
    int count=0;
    int sum=0;
    while(true){
    x = (int)(Math.random()*32);
    if(x%2==0 && x>=2){
    System.out.println(x); //输出偶数
    sum += x;
    count++;
      if(count==6)break;
    }
    }
    System.out.println(sum); //给出偶数之和
    }
    }
      

  10.   

    public class UseCase1 { public static int GetEvenNum(double num1,double num2){ 
    int sum=0; 
    int count=0;
    do 
    { int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    if(s%2==0){ 
    count++;
    System.out.println("本次所得偶数为:"+s); 
    sum=sum+s;

     
    } while(count<6);
    return sum; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO 自动生成方法存根 
    System.out.println("任意6个2~32之间的偶数之和为:"+GetEvenNum(2,32)); 
    } }
      

  11.   

    提醒下...你问的问题和JAVA无关应该正确认识程序设计任何语言都可以解决你所说的问题...而且方法都是一样的....就是具体代码有些不同而已不是因为你刚学JAVA所以不明白...而是因为你刚学编程....思维上没有入门...所以不明白...搞清楚这一点很重要.....
      

  12.   

    楼上这位仁兄说的不错,我以前学过C,不过放下太久了,现在不得不重新学,感到很吃力。我觉得我还是比较喜欢java。但是现在因为工作,不得不C语言,Java两个都拿起来,真的很吃力啊,尤其放下那么多年了。有的时候遇到难题都抓狂到想放弃了。
      

  13.   

    code=Java]
    int count=0;
    while(count<6)
    {
    int s=(int)num1+(int)(Math.random()*(num2-num1)); 
    if(s%2==0){ 
    count++;
    System.out.println("本次所得偶数为:"+s); 
    sum=sum+s; 

    }[/code]
      

  14.   

    MARK     妙招  大家越多越好    涨见识!!