"Shunting Yard"-Algorithmus

Androbin

Bekanntes Mitglied
Hallo Leute,
ich habe vor, einen kleinen Funktions-Plotter zu basteln 😛opcorn:
allerdings suche ich noch nach einer geeigneten Implementierung des "Shunting Yard"-Algorithmus :rtfm:
Hat vielleicht jemand von euch eine Lösung parat :question:
Also er sollte einen double x, sowie einen String funktion annehmen und mir wiederum einen double zurückliefern :toll:
 
Zuletzt bearbeitet:
OK, hab's eingebaut :toll:
blöderweise ist allerdings mein Plotter fehlerhaft, ;(
sprich: er zeichnet rein gar nichts, nicht einmal das JTextField :autsch:

Java:
package de.androbin.lib.plotter;

import de.androbin.lib.plotter.shuntingyard.*;

import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Plotter extends JPanel implements ActionListener {
	
	// Deklarationen
	
	private static final long serialVersionUID = 1L;
	
	protected JTextField term;
	protected ArrayList<Point> graph = new ArrayList<Point>();
	
	// Konstruktoren
	
	public Plotter() {
		
		setFocusable( true );
		setLayout( null );
		term = new JTextField();
		term.setBounds( 10, 10, 200, 50 );
		term.addActionListener( this );
		setVisible( true );
		
	}
	
	// Methoden
	
	public static void main( String[] args ) {
		
		JFrame frame = new JFrame( "Plotter" );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setSize( 500, 500 );
		frame.setLocationRelativeTo( null );
		
		Plotter plotter = new Plotter();
		plotter.setBounds( 10, 10, frame.getWidth() - 10, frame.getHeight() - 10 );
		
		frame.add( plotter );
		frame.setVisible( true );
		
	}
	
	@Override
	public void paint( Graphics g ) { super.paint( g ); for ( int i = 0; i < graph.size(); i++ ) { g.drawOval( graph.get( i ).x - 1, graph.get( i ).y, 2, 2 ); } }
	
	@ Override
	public void actionPerformed( ActionEvent e ) {
		
		double result;
		
		for ( int i = 0; i < getWidth(); i++ ) {
			
			String expr = term.getText().replaceAll( "x", String.valueOf( i ) );
			List<Token> rpn = ShuntingYardScience.parse(expr);
			result = ShuntingYardScience.evalRPN(expr, rpn);
			
			graph.add( new Point( i, (int) result ) );
			
		}
		
	}
	
}
 
Ist jetzt erstmal spontan, aber fehlt da nicht ein this.add(JTextField); in deiner Plotter-Klasse.
Ich mein... ist die einzige Komponente und wenn er die nicht zeichnet...

JFrame sollte er aber zeichnen

Gruß eMmiE
 
😡:eMmiE:
Danke, wie konnte ich nur so bescheuert sein :bloed:

😡:turtle:
Danke nochmal, für den Blog-Eintrag :toll:
 

Zurück
Oben