我编了如下的程序,结果运行以后发现不对劲,应该是有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个偶数啦~
这里你得到了一个随机数,但是这个随机数可能是个奇数,所以下面一句
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));
}
}
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
正解!!!~~~
#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)之间的偶数随机数
((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
這個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));
}
}
//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));
}
}
//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;
}
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));
}
}
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
提醒下...你问的问题和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]
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
#1
int s=(int)num1+(int)(Math.random()*(num2-num1));
这里你得到了一个随机数,但是这个随机数可能是个奇数,所以下面一句
if(s%2==0){
System.out.println("本次所得偶数为:"+s);
}
判断是不是偶数时就跳过了,所以结果当然不可能得到6个偶数啦~
这里你得到了一个随机数,但是这个随机数可能是个奇数,所以下面一句
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));
}
}
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
正解!!!~~~
#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)之间的偶数随机数
((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
這個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));
}
}
//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));
}
}
//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;
}
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));
}
}
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
提醒下...你问的问题和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]
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 妙招 大家越多越好 涨见识!!