3 getallen in oplopende volgorde

Status
Niet open voor verdere reacties.

romanosan

Gebruiker
Lid geworden
7 okt 2007
Berichten
88
Ik heb drie JTextFields gemaakt waar je dus 3 getallen in kunt invoeren. Nou moet ik ervoor zorgen dat de drie getallen in oplopende volgorde via paintComponent () op het scherm worden gezet.

Ik heb de interface enzo al af.Nu de rest nog.
onderstaande code is nog van een vorige applicatie dus mijn if-statement klopt niet..

Code:
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.*;

// Het paneel 
class Paneel extends JPanel {
  private JLabel label;
  private JTextField tekstvak1, tekstvak2,tekstvak3;
  private double cijfer1, cijfer2;
  
  public Paneel() {
	setLayout ( new GridLayout (2,3) );
    label = new JLabel( "Voer 3 getallen in en druk op enter" );
    tekstvak1 = new JTextField( 10 );
    tekstvak1.addActionListener( new TekstvakHandler() );
    tekstvak2 = new JTextField( 10 );
    tekstvak2.addActionListener( new TekstvakHandler() );
    tekstvak3 = new JTextField( 10 );
    tekstvak3.addActionListener( new TekstvakHandler() );

    add (label );
    add (tekstvak1 );
    add (tekstvak2);
    add (tekstvak3);
  }
  
  class TekstvakHandler implements ActionListener {
    public void actionPerformed( ActionEvent e ) {
      String invoer1 = tekstvak1.getText();
      cijfer1 = Double.parseDouble( invoer1 );
      
      String invoer2 = tekstvak2.getText();
      cijfer2 = Double.parseDouble( invoer2 );
      
      
      System.out.println( "" );
      if( cijfer1 > cijfer2 ) {
        System.out.println( "Cijfer1 is hoger" );
        }
      else
      {
          System.out.println( "Cijfer2 is hoger" );

      }
      System.out.println( "Dank u!" );
      System.out.println();
    }
  }
}
 
Laatst bewerkt:
Waarom gebruik maken van Double's? Je zou hier gewoon int's kunnen gebruiken.

Daarnaast is het handig om op die textboxes een keylistener te zetten om foutieve invoer uit te bannen. Dan kom je ook niet in de knoei mocht iemand een letter in willen voeren.

Dan nog.. Er goed om denken dat je iets wat er niet is, niet om kan zetten naar een int.
Als de string welke uit een tekstbox komt alleen maar "" is, dan krijg je een parse error. Dat zal je dus ook nog af moeten vangen.
 
Waarom gebruik maken van Double's? Je zou hier gewoon int's kunnen gebruiken.

Daarnaast is het handig om op die textboxes een keylistener te zetten om foutieve invoer uit te bannen. Dan kom je ook niet in de knoei mocht iemand een letter in willen voeren.

Dan nog.. Er goed om denken dat je iets wat er niet is, niet om kan zetten naar een int.
Als de string welke uit een tekstbox komt alleen maar "" is, dan krijg je een parse error. Dat zal je dus ook nog af moeten vangen.

Code:
[COLOR="Blue"]  class TekstvakHandler implements ActionListener {
	  public void actionPerformed (ActionEvent e )
	  {
		  	String invoer1 = tekstvak1.getText();
			a = Integer.parseInt( invoer1 );
			
			String invoer3 = tekstvak2.getText();
			b = Integer.parseInt( invoer3 );
			
			String invoer2 = tekstvak3.getText();
			c = Integer.parseInt( invoer2 );
			
			if( a<b &  a<c )
			{ 
			    System.out.println( "" +a );
			}
			
			if (b<a & b<c)
			{
				System.out.println( "" +b );
			}
			
			if (c<a & c<b)
			{
				System.out.println("" +c);
			}

			repaint();
	  }
}
[/COLOR]

Nu komt steeds het kleinste getal als uitvoer. Wat ik eigenlijk moet hebben is dat alle drie getallen tegelijk naar voren komen en dan van klein naar groot.
 
Eerst moet je bij de tekstvakken lege invoer nog afvangen:
Code:
String invoer1 = tekstvak1.getText();
if(invoer1 != "")
{
	a = Integer.parseInt( invoer1 );
}

String invoer2 = tekstvak2.getText();
if(invoer2 != "")
{
	b = Integer.parseInt( invoer3 );
}

String invoer3 = tekstvak3.getText();
if(invoer3 != "")
{
	c = Integer.parseInt( invoer2 );
}

Daarna zal een if/else statement komen zo-ongeveer als deze.

Code:
if(a < b)
{
	if(a < c)
	{
		if(b < c) //a < b < c 
		{
			System.out.println("" + a + " " + b + " " + c);
		} //done
		else //a < c < b
		{
			System.out.println("" + a + " " + c + " " + b);
		} //done
	}
	else //c < a < b
	{
		System.out.println("" + c + " " + a + " " + b);
	} //done
}
else
{
	if(a < c)//b < a < c
	{
		System.out.println("" + b + " " + a + " " + c);
	} //done
	else
	{
		if(b < c) // b < c < a
		{
			System.out.println("" + b + " " + c + " " + a);
		} //done
		else //c < b < a
		{
			System.out.println("" + c + " " + b + " " + a);
		}//done
	}
}

Als je niet begrijpt waarom of hoe ik dit doe, zeg het dan.

Het kan ook nog met een case/switch, maar ik wist niet of je hier al eens mee gewerkt hebt.
 
Eerst moet je bij de tekstvakken lege invoer nog afvangen:

Als je niet begrijpt waarom of hoe ik dit doe, zeg het dan.

Het kan ook nog met een case/switch, maar ik wist niet of je hier al eens mee gewerkt hebt.

Met een case/switch ben ik nog niet bekend. Ik ben voor school het boek van gertjan van der laan ( en dan is er Java) aan het afwerken. en ik ben pas bij hoofdstuk 5. Lege invoer afvangen heb ik nog niet gehad, vandaar dat ik dat ook niet in mijn code had verwerkt.

Ik ga even met dit, wat je hebt gepost aan de slag, voor ik verder vragen stel. Java is immers doen doen doen. Dankjewel alvast.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan