Какая часть моей программы находится в неправильном цикле?ДЖАВА - PullRequest
0 голосов
/ 20 июня 2019

Проект состоит в том, чтобы создать программу, которая принимает данные от пользователя в панели JOption и проверяет, является ли число простым или нет. Предполагается, что программа зацикливается до тех пор, пока пользователь не введет 0, что приведет к тому, что программа вычислит максимум, минимум, сумму, число и среднее.

Я выполнил 99% задания, за исключением того, что первое введенное число не распечатывается, как другие, но все равно включается в расчеты

import javax.swing.*;
import java.util.*;


public class Assignment4 {


    public static void main(String[] args) {

        // Main Method

        userInput(); 


    }


    public static void userInput() {

    int number;
    int sum;           
        int count;                          // declaring variables
        int max= 0;
        int min= 1;
        float average; 


        String userNumber;              // Number typed by user


        sum = 0;                        // start at 0 for sum
        count = 0;                      // start at 0 for counter



                // prompt user to enter a positive number


        userNumber = JOptionPane.showInputDialog("Enter a positive integer or 0 to quit");


                        // convert  to int  


            number = Integer.parseInt(userNumber);  


            // if the number entered is positive and not 0, the loop repeats


            while ( number != 0 && number > 0)  {  


                sum += number;           

                // starting count and sum at 0

                count++;  

                // repeating user input prompt unless 0 is entered

                // storing values for min and max as we go

                if (number > max)max=number;
                if (number < min & number != 0)min=number;
            userNumber = JOptionPane.showInputDialog("Enter a positive integer or 0 to quit");  
                number = Integer.parseInt( userNumber );

                // checking if number entered is prime or not

                int i,m=0,flag=0; 

                m=number/2;      

                if(number==0||number==1){  

                 System.out.println(number+" is not a prime number"); 

                }else{  

                 for(i=2;i<=m;i++){     

                  if(number%i==0){   

                   System.out.println(number+" is not a prime number");      

                   flag=1;      
                   break;      
                  }      
                 }      
                 if(flag==0){ System.out.println(number+" is a prime number"); }  
                }

            } 

            if ( count != 0 ) {  


           // as long as one number is entered, calculations are done below


                // calculate average of all numbers entered

                average = (float) sum / count;


                // printing out the results

                System.out.printf("The average is : %.3f\n", average);
                System.out.println("The sum is : "+sum);
                System.out.println("The count is : "+count);
                System.out.println("The max is : "+max);
                System.out.println("The min is : "+min);


           }






    }
}

Мне нужна первая запись для печати, как и остальные, пожалуйста, помогите мне найти, где поместить в цикл

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

У вас есть несколько проблем в вашей программе. Причина, по которой первое число никогда не учитывается, состоит в том, что у вас есть

userNumber = JOptionPane.showInputDialog("Enter a positive integer or 0 to quit");  
number = Integer.parseInt( userNumber );

два раза в вашем коде (до цикла while и в цикле while).

Я бы предложил инициализировать число с помощью Integer.MAX_VALUE: number = Integer.MAX_VALUE;

Затем удалите

userNumber = JOptionPane.showInputDialog("Enter a positive integer or 0 to quit");  
number = Integer.parseInt( userNumber );

перед циклом while.

В if (number < min & number != 0)min=number;

отсутствует &

=>

if (number < min && number != 0) {
  min=number;
}

Условие в цикле while можно упростить, написав while ( number > 0) {, поскольку > 0 также означает != 0.

Я бы также предложил немного улучшить ваш код для удобства чтения. Всегда используйте фигурные скобки для условий (if), даже если вы выполняете только одну строку, если условие истинно.

Надеюсь, это поможет. Дайте мне знать, если вам нужна дополнительная помощь, но вы сможете решить это задание самостоятельно:)

0 голосов
/ 20 июня 2019

Можете ли вы объяснить больше, что вам нужно?Какой ввод вы даете и какой вывод видите?

Я заметил, что вы добавляете числа перед вызовом JOptionPane, возможно ли, что вы на count больше на единицу, чем ваш фактическийколичество чисел?Ваш отступ ужасен, вы должны его почистить, у меня проблемы с чтением кода.

// 1 START OF LOOP
        while ( number != 0 && number > 0)  {  

// 2 ADD NUMBER TO SUM
            sum += number;           

            // starting count and sum at 0

            count++;  

            // repeating user input prompt unless 0 is entered

            // storing values for min and max as we go

            if (number > max)max=number;
            if (number < min & number != 0)min=number;

// 3 THEN GET INPUT.  WHAT???

        userNumber = JOptionPane.showInputDialog("Enter a positive integer or 0 to quit"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...