Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException: / by zero at factoroperations.compute(factoroperations.java:21) at factorframe$buttonhandler.actionPerformed(factorframe.java:71) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:20 18) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav a:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel .java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259 ) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL istener.java:252) at java.awt.Component.processMouseEvent(Component.java:6504) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6269) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832 ) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo main.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo main.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo main.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre ad.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread. java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre ad.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
//Project: A program that factors numbers
//This defines the properties of the user interface
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
public class factorframe extends JFrame
{//declare all the variables
private JLabel integerlabel;
private JTextField integerfield;
private JLabel factorslabel;
private JTextField factorsfield;
private JLabel namelabel;
private JButton computebutton;
private JButton clearbutton;
private JButton exitbutton;
private String integerstring;
private long integer;
private String factorsstring;
private int factors;
private factoroperations factormachine;
public factorframe() //This is the constructor
{ //add all buttons and fields
super("Factor Frame");
setLayout(new FlowLayout());
namelabel = new JLabel("Integer Factorization By Michael Daigh");
add(namelabel);
integerlabel = new JLabel("Enter an integer:");
add(integerlabel);
integerfield = new JTextField(20);
add(integerfield);
factorslabel = new JLabel("The factors are:");
add(factorslabel);
factorsfield = new JTextField(20);
add(factorsfield);
computebutton = new JButton("Compute Factors");
add(computebutton);
clearbutton = new JButton("Clear");
add(clearbutton);
exitbutton = new JButton("Exit");
add(exitbutton);
buttonhandler myhandler = new buttonhandler();
computebutton.addActionListener(myhandler);
clearbutton.addActionListener(myhandler);
exitbutton.addActionListener(myhandler);
factormachine = new factoroperations();
}//End of constructor method
private class buttonhandler implements ActionListener
{public void actionPerformed(ActionEvent event)
{
if(event.getSource() == computebutton)//if user clicks compute factors
{//computes the factors of the number
integerstring = integerfield.getText();//get the number
integer = Long.parseLong(integerstring);
factorsstring = factoroperations.compute(integer);
factorsfield.setText(factorsstring);//display the factors
}
else if(event.getSource() == clearbutton)//if user clicks clear
{//clears all data in integer field and factor field
integer=0;
integerfield.setText("");
factors=0;
factorsfield.setText("");
}
else if(event.getSource() == exitbutton)//if user clicks exit
{//exits the program
System.exit(0);
}
else
System.out.println("Unknown error");
}//End of actionPerformed
}//End of buttonhandler class
}//End of factorframe class
//Project: A program that factors numbers
//This contains the algorithm used by this project.
public class factoroperations
{
public static String compute(long integer)
{
String factor="";//initialize the factor string
int check = 1;//initialize the prime check
for(int i=2; i<=integer/2; i++)
{
if(integer%i==0)//i is a factor of the number
{
for(int k=2; k<i; k++)//check if it is prime
{
if(i%k ==0)
{
check = 1;
break;
}
else
check = 0;
}
if(check == 0 || i == 2)//display the prime factors only
{
factor = factor + " " + i + "P";
}
else if(check == 1)//display all other factors
factor = factor + " " + i;
}
}
if(factor == "")//if number does not factor, it is already prime
{
factor = "No factors. It is a prime number";
}
return factor;
}
}//End factoroperations class
//Project: A program that factors numbers
//This activates the user interface.
import javax.swing.JFrame;
public class testfactor
{public static void main(String[] args)
{factorframe myframe = new factorframe();
myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myframe.setSize(325,225);
myframe.setVisible(true);
}//End of main
}//End of class testfactor
最佳答案
你得到 int 溢出并除以 0。虽然 integer
参数是一个 long,但你的 i 是一个 int,如果它试图递增以匹配大长参数,当它溢出时,它的值可以是 0、负数,或者上帝知道是什么。
一个可能的解决方案:您的 for 循环索引应该都是 long,而不是 int。
此外,尽管如此,给一个long 参数或变量命名integer
还是很令人困惑的!
关于java - 为什么我收到错误 "Exception in thread "AWT-EventQueue- 0"java.lang.ArithmeticException:/by zero"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433965/