Цикл отказывается работать - Java
Формулировка задачи:
Добрый день! Пишу домашку по информатике, и тут - сюрприз! Не работает внешний цикл при наличии внутреннего!
Как он зафиксирует 'x = -10.0' так этот x никуда и не сдвинется, а цикл завершится по завершении внутреннего.
Вот код:
Более того, если написать ЛЮБОЙ вложенный цикл в методе paint(), то внешний не будет работать. Поэтому я вынес это всё в paintToPanel(). Но и это не помогло. И только цикл, написанный в main(), будет работать, так, как положено ему работать.
Буду очень признателен
package fractals; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.geom.*; public class MainFrame extends javax.swing.JFrame { private Point2D.Double centerPoint; private double scale; private double a, b, c; private double infinity; private int maxCoubtOfSteps; public MainFrame() { initComponents(); centerPoint = new Point2D.Double(0, 0); scale = 20; } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jPanel1 = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jPanel1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jPanel1MouseClicked(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 400, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 300, Short.MAX_VALUE) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); pack(); }// </editor-fold> private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) { paintToPanel(); } public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see [url]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/url] */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MainFrame().setVisible(true); } }); } private Color colorFunc(int step) { return new Color(step); } private Point toScreenPoint(Complex c) { int w = jPanel1.getWidth(); int h = jPanel1.getHeight(); return new Point(w / 2 + (int) ((w / scale) * (c.a - centerPoint.x)), h / 2 + (int) ((w / scale) * (c.b - centerPoint.y))); } private void paintToPanel() { Graphics p1g = jPanel1.getGraphics(); double w = jPanel1.getWidth() * 1.0; double h = jPanel1.getHeight() * 1.0; double x = centerPoint.x - (scale / 2.0); double lx = centerPoint.x + (scale / 2.0); double y = centerPoint.y - (h / w) * (scale / 2.0); double ly = centerPoint.y + (h / w) * (scale / 2.0); double step = scale / (w * 1.0); MyFunction mf = new MyFunction(a, b, c); System.out.println(x + " " + lx); for (; x <= lx; x += step) { for (; y <= ly; y += step) { Worker worker = new Worker(mf, new Worker.Completed() { @Override public void completed(Complex p, int step) { Point sp = toScreenPoint(p); p1g.setColor(colorFunc(step)); p1g.fillRect(sp.x, sp.y, 1, 1); } }, new Complex(x, y), maxCoubtOfSteps, infinity); worker.start(); System.out.println(x + " " + y); } } } @Override public void paint(Graphics g) { super.paint(g); a = b = c = 1; infinity = 1; maxCoubtOfSteps = 10; System.out.println("paint"); paintToPanel(); } // Variables declaration - do not modify private javax.swing.JPanel jPanel1; // End of variables declaration }
Решение задачи: «Цикл отказывается работать»
textual
Листинг программы
package fractals; public class Worker extends Thread{ private final Function f; private final Completed c; private final int maxCountOfSteps; private final double infinity; private final Complex p; public static interface Completed{ public void completed(Complex p, int step); } public Worker(Function f, Completed c, Complex p, int maxCountOfSteps, double infinity){ this.f = f; this.c = c; this.p = p; this.maxCountOfSteps = maxCountOfSteps; this.infinity = infinity; } @Override public void run() { Complex cur = new Complex(p.a, p.b); for(int i = 1; i <= maxCountOfSteps; ++i){ cur = f.f(cur); if(cur.moodle() >= infinity){ c.completed(p, i); interrupt(); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д