我想问道Java中的练习题

时间:2021-07-25 11:51:56
题目是:尝试开发一个程序,获取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));
}

}

19 个解决方案

#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


引用 2 楼 mysky191_chi 的回复:
//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…
正解!!!~~~

#5


(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)之间的偶数随机数

#6


应该加入对奇数情况的处理吧

#7


引用 2 楼 mysky191_chi 的回复:
//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…

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

#8


问题在注释中说明了:

//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)); 


}

#9


问题在注释中说明了:

//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)); 


}

#10


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-while

int 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; 

#11


楼主的代码的问题楼上的高手们已经解答了...
按楼主的给的问题,没考虑偶数重复,我的代码:
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); //给出偶数之和
}
}

#12


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)); 


}

#13


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



提醒下...你问的问题和JAVA无关

应该正确认识程序设计

任何语言都可以解决你所说的问题...而且方法都是一样的....就是具体代码有些不同而已

不是因为你刚学JAVA所以不明白...而是因为你刚学编程....思维上没有入门...所以不明白...

搞清楚这一点很重要.....

#14


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

#15


其实自己解决的话逐步调试,跟踪要看的变量应该就知道哪错了

#16


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]

#17


mark

#18


最近人好少,记号一个。。。

#19


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

#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


引用 2 楼 mysky191_chi 的回复:
//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…
正解!!!~~~

#5


(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)之间的偶数随机数

#6


应该加入对奇数情况的处理吧

#7


引用 2 楼 mysky191_chi 的回复:
//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…

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

#8


问题在注释中说明了:

//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)); 


}

#9


问题在注释中说明了:

//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)); 


}

#10


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-while

int 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; 

#11


楼主的代码的问题楼上的高手们已经解答了...
按楼主的给的问题,没考虑偶数重复,我的代码:
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); //给出偶数之和
}
}

#12


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)); 


}

#13


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



提醒下...你问的问题和JAVA无关

应该正确认识程序设计

任何语言都可以解决你所说的问题...而且方法都是一样的....就是具体代码有些不同而已

不是因为你刚学JAVA所以不明白...而是因为你刚学编程....思维上没有入门...所以不明白...

搞清楚这一点很重要.....

#14


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

#15


其实自己解决的话逐步调试,跟踪要看的变量应该就知道哪错了

#16


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]

#17


mark

#18


最近人好少,记号一个。。。

#19


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

#20