Поймите, что происходит с моими вычислениями простых чисел и простыми числами JFrame

Я хотел бы выяснить, что не так с моим кодом, и помочь понять, что происходит с моими вычислениями простых чисел и простыми числами JFrame.

  1. For some reason, the calculations one was only saying the prime numbers of 1-100 is
    1. I took out the system.exit(0); and now I need to click through all the numbers before exiting. What I was hoping to achieve was to get one list that listed all the prime numbers 1-100.
  2. Затем с закодированными вычислениями простых чисел мне нужно сделать простые числа JFrame. У меня слишком много ошибок, это моя первая проблема, а затем, во-вторых, из-за ошибок я не могу запустить проект, чтобы увидеть его.

Я разместил свой код как для вычисления простых чисел, так и для моего JFrame. Любая помощь в выяснении того, что происходит / не так, будет принята с благодарностью.

*********************************************************************************
//Prime Numbers Java Swing JFrame
**********************************************************************************

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;


 public class ProgrammingAssignment8 extends JFrame 
 implements ActionListener 
 {

//DECLARE BUT DO NOT INSTANTIATE
private JButton calculate;
private JButton clear;
private JButton exit;

//PANELS
private JPanel jpnlMain = new JPanel();

private JPanel jpnlTop = new JPanel();
private JPanel jpnlCenter = new JPanel();
private JPanel jpnlBotton = new JPanel();

private JScrollPane scrollingResult;


//DECLARE JFRAME COMPONENTS
private JLabel jlblName, jlblMaxTest;
private JTextField jtfName, jtfMaxTest;
private JTextArea jtaName, jtaMaxNumbers;
private JButton jbutCalculate, jbutClear, jbutExit;

private CalculateButtonHandler calculateHandler;
private ClearButtonHandler clearHandler;
private ExitButtonHandler exitHandler;





/**
 * @param args
 */

//CLASS CONSTRUCTOR 
public ProgrammingAssignment8 (String sTitle) 
{       

//PREPARE THE JFRAME/WINDOW
    super(sTitle);
//SET TITLE AND SIZE
setTitle(sTitle);
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//SET THE LAYOUT
jpnlMain.setLayout(new GridLayout(3,3,5,5));

 //INSTANTIATE THE JBUTTONS WITH THE PASSED CAPTION AND COLOR AND ADD TO JPANEL
//PUT INTO A METHOD FOR EFFICIENCY AND TO AVOID REPEATING ALL THE CODE
jbtnCalculate = instantiateJButton("Calculate", Color.red);
jbtnClear = instantiateJButton("Clear", Color.blue);
jbtnExit = instantiateJButton("Exit", Color.black);

//INSTANTIATE THE JLABEL COMPONENTS
jlblName = new JLabel ("");

//PREPARE THE CONTAINER
Container ca = getContentPane();
}

set visible(true);


//END CONSTRUCTOR


private JButton instantiateJButton(String, sInCaption, Color inColor)
{
JButton jbtnButton = new JButton(sInCaption);
jbtnButton.setActionCommand(sInCaption);
jbtnButton.addActionListener(this);
jbtnButton.setForeground(inColor);
jbtnButton.setFont(fontChosenFont);
jpnlMain.add(jbutnButton);
return jbtnButton;

//END INSTANTIATE JBUTTON

//CLASS EVENT HANDLER   
public void actionPerformed(java.awt.event.ActionEvent e)

{
    //FIND OUT WHICH BUTTON WAS PRESSED BY USING THE ACTION COMMAND VALUE
    String sActionCommand = e.getActionCommand();

    //FROM THE ACTIONEVENT OBJECT, GET AN INSTANCE OF THE JBUTTON THAT WAS PRESSED
    JButton jbtnSource = (JButton) e.getSource();

    jbtnSource.setEnabled(false);

    //LET THE USER KNOW WHAT BUTTON WAS CLICKED
    JOptionPane.showMessageDialog(null,  "You pressed the "" sActionCommand + " button", this.getTitle(), JOptionPane.INFORMATION_MESSAGE);
}

//END ACTIONPERFORMED (java.awt.event.ActionEvent e)

//EXECUTION STARTING POINT

public static void main(String[] args)
{
    ProgrammingAssignment8 = new ProgrammingAssignment8("Instantiates with a Method");

}
//END main(String[] args)


}
//END ProgrammingAssignment8 CLASS


***********************************************************************************
PRIME NUMBERS CALCULATIONS
***********************************************************************************

import javax.swing.JOptionPane;
public class ProgrammingAssignment7 
{

/**
 * @param args
 * @return 
 */
public static void main(String[] args) 
{
    //Scanner Scan = new Scanner (System.in);
    // TODO Auto-generated method stub

    //DECLARE VARIABLES
    int x = 1;
    int i = 1;
    int iNumber = 1;
    boolean bNotPrime = false;
    boolean bIsPrime = true;
    int iNumberToTest;
    int iPrimeCheck;
    int iCounter;
    int iResult = 1;
    int iFact = 1;
    int iLimit = 100;
    String OutputStr = null;





    System.out.println("Prime numbers between 1 and " + iLimit);

    //loop through the numbers one by one
    for(i=1; i < 100; i++)
    {

            bIsPrime = true;

            //check to see if the number is prime
            for(int j = 2; j < i ; j++){

                    if(i % j == 0){
                            bIsPrime = false;
                            break;
                    }
            }
            // print the number
            if(bIsPrime)

                OutputStr = "The Prime Numbers of 1 - 100 are: " + i + "\n";

                JOptionPane.showMessageDialog(null, OutputStr, "PRIME NUMBERS", JOptionPane.INFORMATION_MESSAGE);
                   //System.out.print(i + "\n" );






    //LISTS NUMBERS 1 THROUGH 100, INITIALIZE INTEGER NAMED I, IF IT IS LESS THAN OR EQUAL TO 100 THEN ADD ONE TO THE LOOP



    /* for (int i=1; i<=100; i++)
    {
        System.out.println(i);
    }



    /* iNumber = 7;

    for (iNumber = 1; iNumber <= 100; iNumber++)
        iResult = iNumber / 1;
    System.out.println(iResult);

    /* for ( iNumber = 2; iNumber <= 100; iNumber++ )
    {
      if ( iNumber % iNumber == 0 )
      {
        bIsPrime = false;
    break;

      }
    }

    return bIsPrime;
}

*/





    /* iNumber = 1; 
    while (iNumber < 100) iNumber++; 
    { 
        System.out.print(iNumber + " ");
        System.out.println();


        for (iNumber = iNumber - 1; iNumber > 2; iNumber++) 
        { //divides the number by each number less than the number itself and also greater than 1 (because 1 is a factor of every number, and every number is a factor of itself)
            if (iNumber % iNumber != 0) 
                System.out.println(iNumber + " is a prime number.");




            { //else if the number is evenly divisible by a number other than itself and 1 (we weeded out those cases in the above for statement), then it sets the boolean to be true, and breaks the for loop
                bNotPrime = false;
                iNumber = 1;
            }

        }

        if (bIsPrime = true) 
        { //if the number is not not a prime, then it prints the number and the for loop moves on 

        }

        else if (bNotPrime = false)
        { //otherwise the for loop moves on
            System.out.println(iNumber + " is not a prime number.");

            */              


}
}
}

person tooheymomster    schedule 08.04.2013    source источник
comment
Вы начинаете проверять простые числа, начиная с j=2, это автоматически устанавливает IsPrime в значение true для i = 1.   -  person Destrictor    schedule 08.04.2013
comment
из-за ошибок я не могу запустить проект, чтобы увидеть его. Сначала исправьте это, а затем обратитесь к совету @NPE для времени выполнения. Это кажется «слишком широким». Кстати, сначала запустите его в командной строке со сканером, чтобы проверить логику. Затем подумайте, как преобразовать его в графический интерфейс.   -  person Andrew Thompson    schedule 08.04.2013
comment
.........   -  person mKorbel    schedule 08.04.2013
comment
Обычно, когда я исправляю то, что нужно, все ошибки уходят. На этот раз я не знаю, что исправить. Я использую отладчик прямо сейчас, чтобы попробовать. Я надеялся, что кто-то сможет посмотреть на проделанную мной работу и указать мне, в чем причина проблемы и что я делаю неправильно.   -  person tooheymomster    schedule 08.04.2013


Ответы (2)


  • set visible(true); находится вне конструктора и не является допустимым именем метода, оно должно быть setVisible(true);, переместиться вверх, чтобы оно отображалось непосредственно перед }, которое в данный момент находится над ним...
  • private JButton instantiateJButton(String, sInCaption, Color inColor) не является допустимой сигнатурой метода, вы добавили , после String там, где это не нужно, должно быть private JButton instantiateJButton(String sInCaption, Color inColor)
  • В JOptionPane.showMessageDialog(null, "You pressed the "" sActionCommand + " button", this.getTitle(), JOptionPane.INFORMATION_MESSAGE); отсутствует + и слишком много ". Я думаю, что это должно быть JOptionPane.showMessageDialog(null, "You pressed the " + sActionCommand + " button", this.getTitle(), JOptionPane.INFORMATION_MESSAGE);
  • ProgrammingAssignment8 = new ProgrammingAssignment8("Instantiates with a Method"); не является допустимым присваиванием, на самом деле вы ничему не присваиваете значение... что-то вроде ProgrammingAssignment8 assignment = new ProgrammingAssignment8("Instantiates with a Method"); исправит это.

Следующий комментарий не корректен...

***********************************************************************************
PRIME NUMBERS CALCULATIONS
***********************************************************************************

Это...

/***********************************************************************************
PRIME NUMBERS CALCULATIONS
***********************************************************************************/
  • У меня нет определений для CalculateButtonHandler, ClearButtonHandler, ExitButtonHandler, jbtnCalculate, jbtnClear, jbtnExit или fontChosenFont, поэтому я не могу комментировать, разумеется, это не сработает, пока они не будут написаны...
person MadProgrammer    schedule 08.04.2013

Что вы можете сделать, так это сохранить простые числа в коллекции. Посмотрите, например, ArrayList. Это похоже на массив, но динамически растет, поэтому вам не нужно заранее указывать размер.

Когда у вас есть список, вы можете показать этот список пользователю.

person user2256394    schedule 08.04.2013
comment
Посмотрите, например, на ArrayList Или выберите универсальный List и используйте любой расширяемый контейнер, который лучше всего подходит. В этом конкретном случае «список в графическом интерфейсе (Swing)», возможно, странно, что Vector предпочтительнее, потому что JList (например) имеет конструкторы, которые принимают Vector. ;) +1 за совет в целом. - person Andrew Thompson; 08.04.2013