Java в то время как циклы / математическая логика - PullRequest
3 голосов
/ 03 ноября 2010

Я новичок в Java, а также в новых операторах while, for и if / else.Я действительно боролся с этим чудовищем проблемы.

Код и описание ниже.Он компилируется, но я не рассчитываю, как ожидалось.Я не совсем уверен, является ли это математической логической ошибкой, ошибкой расположения петель, или и тем, и другим.

Я уже довольно долго шлифую свои шестерни, и я не могу этого увидеть.Я чувствую, что я действительно близко ... но все еще так далеко.

Код:

/* 
This program uses a while loop to to request two numbers and output (inclusively) the odd numbers between them, 
the sum of the even numbers between them, the numbers and their squares between 1 & 10, the sum of the squares 
of odd numbers.
*/

import java.io.*;
import java.util.*;

public class SumOfaSquare
{
 static Scanner console = new Scanner(System.in);

 public static void main (String[] args)
 {

 int firstnum = 0, secondnum = 0, tempnum = 0;
 int sum = 0,squaresum = 0, squarenum = 0;
 int number = 1;


 String oddOutputMessage = "The odd numbers between" + firstnum + " and " + secondnum + " inclusively are:";
   String evenSumMessage = "The sum of all even numbers between " + firstnum + " and " + secondnum + "is: ";
   String oddSquareMessage = "The odd numbers and their squares are : ";
   String squareMessage = "The numbers and their squares from 1-10 are : ";

 System.out.println ("Please enter 2 integers. The first number should be greater than the second: ");
 firstnum = console.nextInt();
 secondnum = console.nextInt();

 //used to find out if first number is greater than the second. If not, inform user of error. 
 if (firstnum > secondnum)
 {
  tempnum = firstnum;
  System.out.println ("You entered: " + firstnum + " and: " + secondnum);
 }
 else
  System.out.println ("Your first number was not greater than your second number. Please try again.");

 //while the frist number is greater, do this....
 while (tempnum <= secondnum)
 { 
  //if it's odd....
  if (tempnum %2 == 1)
   {
   oddOutputMessage = (oddOutputMessage + tempnum + " ");
   squaresum = (squaresum + tempnum * tempnum);
   }

  //otherwise it's even.. 
  else
   {
   sum = sum + tempnum;
   evenSumMessage = (evenSumMessage + sum + " ");
   tempnum++;
   }
 }
 // figures squares from 1 - 10
 while (number <=10) 
 {
   squarenum = (squarenum + number * number);
    squareMessage = (squareMessage + number + " " + squarenum);
   number++;
 }



  oddSquareMessage = oddSquareMessage + squaresum;
  System.out.println (oddOutputMessage); 

  System.out.println (oddOutputMessage);
  System.out.println (squareMessage);
  System.out.println (evenSumMessage);
  System.out.println (oddSquareMessage);

 }
} 

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

В первом цикле тщательно продумайте условия, при которых вы увеличиваете tempnum.Что происходит, когда это странно?tempnum увеличивается?

0 голосов
/ 04 ноября 2010

Есть ряд проблем с вашим кодом.Я бы предпочел, чтобы вы сами решили проблему.Вы можете использовать отладку «println» для распечатки переменных по пути, если вы не знаете, как отлаживать код.

Возьмите ввод 3 и 1, построчно просматривайте вашу программу и думайте о том, чтоответ будет в вашей голове (или на бумаге).Посмотрите, соответствует ли это вашим ожидаемым результатам.

Вот несколько общих комментариев о вашем коде:

  • Рассмотрите возможность разбить различный вывод на разные подпрограммы: dumpOddNumbers(low, high), sumEvenNumbers(low, high), ...
  • Постарайтесь максимально ограничить область видимости переменных.Не определяйте переменные сверху, а затем используйте их позже.Попробуйте определить их прямо перед тем, как они вам понадобятся.Это ограничит ваши непреднамеренные последствия.Старайтесь не использовать переменные повторно, если это не временные счетчики.
  • while (tempnum <= secondnum) Эти строки должны быть <code>for loop.Одна из проблем с кодом состоит в том, что если первое число <, то второе (например, входное значение 1 10), программа зацикливается навсегда, потому что tempnum не увеличивается, если число нечетное. </li>
  • while (tempnum <= secondnum) должно быть for (int tempnum = firstnum; tempnum <= secondnum; tempnum++)
  • while (number <= 10) должно быть for (int number = 1; number <= 10; number++)
  • Вы определяете сообщение в верхней части вашей программы, но позже вам не следует добавлять результаты.Сделайте что-то вроде println(msgString + resultValue).
  • Взгляните на StringBuilder() вместо msg = msg + ... типа логики.Гораздо эффективнее.
  • Когда вы проверяете числа в правильном порядке и выдаете сообщение об ошибке, вы уверены, что хотите продолжить?Я думаю, вы должны return там.
  • Следующий код не соответствует комментарию.Что правильно?

    // while the frist number is greater, do this
    while (tempnum <= secondnum) {
    

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...