2013-12-13 28 views
0

我想从用户输入的数字中找到偶数和甚至最大值。例如,如果他们回答“多少个整数?”与4和输入的整数:2,9,18,4它应该输出:找到偶数,甚至最大

how many integers? 4 
next integer? 2 
next integer? 9 
next integer? 18 
next integer? 4 
even sum = 24 
even max = 18 

这里是我的代码:

public static void evenSum(){ 
     //prompt the user to enter the amount of integers 
     Scanner console = new Scanner(System.in); 
     System.out.print("how many integers? "); 
     int numbers = console.nextInt(); 
     //prompt user to enter the first integer 
     System.out.print("next integer? "); 
     int firstNum = console.nextInt(); 
     //set the even max to the firstNum 
     int evenMax = firstNum; 
     //set the evenSum to zero 
     int evenSum = 0; 
     //for loop for the number of times to ask user to input numbers 
     for (int i = 2; i <= numbers; i++) { 
      System.out.print("next integer? "); 
      int num = console.nextInt(); 
      //check to see if the first number is even 
      if (firstNum % 2 == 0){ 
      //if it is even then add it to the evenSum 
       evenSum += firstNum; 
      } 
      //check to see if the numbers entered are even 
      if (num % 2 == 0) { 
      //if they are even add them to the evenSum 
       evenSum += num; 
      } 
      //check to see if the number entered is bigger than the first number 
      if (num > firstNum) { 
       if (num % 2 == 0 ) { 
        evenMax = num; 
       } 
      } 
     } 
     System.out.println("even sum = " +evenSum); 
     System.out.println("even max = " +evenMax); 
} 

但这里是我的输出是什么:

how many integers? 4 
next integer? 2 
next integer? 9 
next integer? 18 
next integer? 4 
even sum = 28 
even max = 4 

有人可以帮我弄清楚问题是什么?

+2

在for循环中,如果firstNum是偶数,则在每次迭代时将'firstNum'添加到'evenNum'。移动'if(firstNum%2 == 0){even_more + = firstNum;在循环之外。 –

+0

为了更好地提供帮助,请发布[SSCCE](http://sscce.org/)。 “短”之后关注术语的各个部分。 –

+1

为什么你对待第一个值如此不同?我没有看到任何理由处理第一个值与以后的值不同。 –

回答

0

你在做一些非常奇怪的东西,第一次输入数字时被视为特殊。这导致输入的第一个偶数(在这种情况下为2)被添加多次。

把所有的输入在相同的循环,这样就可以平等地对待一切:

public static void evenSum(){ 
    //prompt the user to enter the amount of integers 
    Scanner console = new Scanner(System.in); 

    System.out.print("how many integers? "); 
    int numbers = console.nextInt(); 

    int evenSum = 0; 
    int evenMax = 0; 

    //for loop for the number of times to ask user to input numbers 
    for (int i = 0; i < numbers; i++) { 
     //input new number 
     System.out.print("next integer? "); 
     int num = console.nextInt(); 

     //check to see if the number is even. if it is not even, 
     //we don't care about it at all and just go to the next one 
     if (num % 2 == 0){ 
      //add it to the sum 
      evenSum += num; 

      //if it's larger than the maximum, set the new maximum 
      if (num > evenMax) { 
       evenMax = num; 
      } 
     } 
    } 
    System.out.println("even sum = " +evenSum); 
    System.out.println("even max = " +evenMax); 
} 

正如你所看到的,这个代码也才检查是否一个数是偶数一次。在每次使用时都不需要连续检查是否为num:在单次循环的持续时间内,其值不会改变。

+1

我注意到这几乎都是正确的,除了evenSum + = firstNum需要evenSum + = num。 – a24

+0

谢谢!看起来我保留了错误的路线。良好的捕获,编辑修复。 – Mumbleskates

0

将下面的代码里面的for循环之前刚刚为环 -

if (firstNum % 2 == 0){ 
     //if it is even then add it to the evenSum 
     evenSum += firstNum; 
} 

这将阻止第一个数字在evenSum

0

反复另外你也想

if (num > evenMax) { 
    if (num % 2 == 0) { 
     evenMax = num; 
    } 
} 

或者

if (num > evenMax && num % 2 == 0) { 
    evenMax = num; 
} 

在你的场景中,firstNum是2,因此它后面的每个数字在技术上都比较大,所以你(理论上)不会得到在第一个数字后输入的最大偶数。

0

将for循环中的第一个if条件向上(for循环之外) 或将所有用户输入存储在数据结构(即Array)中,然后再处理它们。 将它们存储在Array中可以更容易地处理数据。

+0

“在foor循环内向上(for循环的外部)”...?我不知道你是什么意思。 – Mumbleskates

+0

我的意思是把for循环中的第一个条件移到它外面。是不是很难理解先生?我认为给予我的回答的人非常清楚地得到了这个观点 – 2013-12-16 14:53:24

+0

请看,我仍然无法真正说出你在这里所说的100%。发布答案时,语法,标点符号和清晰度非常重要。 – Mumbleskates

0

工作代码: -

Scanner console = new Scanner(System.in); 
    int numbers =0, firstNum =0, num =0 ;   
    System.out.print("how many integers? "); 
    numbers = console.nextInt(); 
    System.out.print("next integer? "); 
    firstNum = console.nextInt(); 
    int evenMax = 0; 
    int evenSum = 0; 

    if(firstNum%2==0) 
    { 
    evenSum = firstNum; 
    evenMax = firstNum; 
    } 


    for (int i = 1; i < numbers; i++) { 
     System.out.print("next integer? "); 
     num = console.nextInt(); 



    if (num % 2 == 0) { 
//don't add firstNum multiple times to the evenSum, earlier it was added every time you entered an even number 
       evenSum += num; 

//check if the number you entered, i.e. num greater than the already existing greatest number i.e. evenMax and if so update it 
       evenMax = num > evenMax: num?evenMax; 
      } 
     } 
     System.out.println("even sum = " +evenSum); 
     System.out.println("even max = " +evenMax); 
} 

希望这有助于。你的代码有三个主要问题: -

  1. 每输入一个偶数,firstNum(如果它是偶数的话)就被加到总和上。即如果第一个数字是4并且循环运行10次并且遇到6个偶数,则与偶数4一起也增加6次。如果你想用它作为一个特殊的数字并分别得到它的值,那么你必须在循环之前将它添加到总和中。

  2. 您应该比较每个新的偶数与前一个最大的偶数,并因此设置evenMax的值。您将它们与firstNum进行比较,因此如果第一个数字是2并且最后一个偶数数字大于2,那么它将被设置为evenMax的值。将每个偶数与当前最大偶数进行比较,即evenMax的当前值。

  3. 您不检查第一个数字是否偶数,并将其分配给偶数最大值。所以如果它是999999,它仍然被分配,但它不是。

请检查它是否正确,如果你觉得它有用,请投票。