dynamisches Array

  • Themenstarter Themenstarter kurt++
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

kurt++

Gast
Brauche ein Array mit Zeichenkette, welches Automatisch nach jedem einfügen/löschen größer/kleiner wird. Ich möchte aber auch genau sagen können das ich auf Stelle xy zugreifen will. Bekommt man das in Java irgendwie hin?
 
ich vermute mal, dass es eine schulaufgabe ist und er deshalb sicher keine collections nehmen darf

klar geht das in java
 
Naja - eine ArrayList o.ä wird ja nicht "echt" nach jedem Einfügen größer oder kleiner ... aber "sie fühlt sich so an, als würde sie das tun" 😀 von daher denke ich, dass das eine geeignete Lösung ist...
 
keine Schulaufgabe, also wäre mir eine saubere einfache Lösung am liebsten....

die Array Liste habe ich ausprobiert aber irgendwie habe ich mit der viele Probleme:

Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.event.*;
import java.util.Properties;
import java.util.ArrayList;
import java.util.Iterator;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class PKONV0003
extends JFrame
implements ActionListener, CaretListener
{
	
	private JTextField tfWcodes = new JTextField(25);
	private JTextField tfAVar = new JTextField(5);
	private JTextField tfIndAkt = new JTextField(2);
	private JTextField tfIndMax = new JTextField(2);
	private JButton btnVor = new JButton(">");
	private JButton btnZurueck = new JButton("<");
	
	private static int IndMax = 1;                                                       
	private static int IndAkt = 1;
	private static int upd = 0;
	
	private ArrayList<String> AVar = new ArrayList<String>();
	private ArrayList<String> Wcodes = new ArrayList<String>();
		
 	private static PKONV0003 wnd = new PKONV0003();
 	
	public PKONV0003()
	{
		super("Eingabe der Werbecodes");
		
		Container contentPane = getContentPane();
		contentPane.setLayout(new GridLayout(3,1));
		
// Zeile 1: 

		JPanel zeile1 = new JPanel();
		zeile1.setLayout(new GridLayout(1,2));
		 
		JLabel lblAVar = new JLabel(
				"  Ausgabevariante:",
				SwingConstants.LEFT
				);
		zeile1.add(lblAVar);
		tfAVar.addCaretListener(this);
		tfWcodes.setToolTipText("Eingabe der Ausgabevariante");
		zeile1.add(tfAVar);				
		
		zeile1.setBorder(BorderFactory.createEtchedBorder());
		contentPane.add(zeile1);
		
// Zeile 2:
		
		JPanel zeile2 = new JPanel();
		zeile2.setLayout(new GridLayout(1,2));
		
		JLabel lblWcodes = new JLabel(
				"  Werbecodes:",
				SwingConstants.LEFT
				);	
		zeile2.add(lblWcodes);
		tfWcodes.addCaretListener(this);
		tfWcodes.setToolTipText("Eingabe der Werbecodes");
		zeile2.add(tfWcodes);

		zeile2.setBorder(BorderFactory.createEtchedBorder());
		contentPane.add(zeile2);
		
// Zeile 3:
		
		JPanel zeile3 = new JPanel();
		zeile3.setLayout(new FlowLayout());
		
		btnZurueck.setToolTipText("Zurück");
		btnZurueck.addActionListener(this);
		zeile3.add(btnZurueck);
		
		tfIndAkt.setToolTipText("Springe zu...");
		tfIndAkt.addActionListener(this);
		tfIndAkt.setText("1");
		zeile3.add(tfIndAkt);
		
		JLabel lblFlash = new JLabel(
				"  /",
				SwingConstants.LEFT
				);	
		zeile3.add(lblFlash);
		
		tfIndMax.setEditable(false);
		tfIndMax.setText("1");
		zeile3.add(tfIndMax);
		
		btnVor.setToolTipText("Vor");
		btnVor.addActionListener(this);
		zeile3.add(btnVor);
		
		zeile3.setBorder(BorderFactory.createEtchedBorder());
		getContentPane().add(zeile3);
		
		AVar.add(0," ");
		Wcodes.add(0," ");		
	}
	
	public void caretUpdate(CaretEvent event)
	{
		
		if (upd == 0)
		{
	 		AVar.add(IndAkt,tfAVar.getText());
	 		Wcodes.add(IndAkt,tfWcodes.getText());
			
			System.out.println(IndAkt+": "+AVar.get(IndAkt)+" - "+Wcodes.get(IndAkt)+" - *");
			
			IndMax = Wcodes.size();	
			tfIndMax.setText(String.valueOf(IndAkt));
		}
	}
	
	public void actionPerformed(ActionEvent event)
	{
		upd = 1;
		
				
		String cmd = event.getActionCommand();
//		System.out.println(cmd);
				
 		if(cmd == ">")
 		{
 			if(IndAkt <= IndMax)
 			{
 				IndAkt++;
 			}
 		}
 		if (cmd == "<")
 		{
 			if(IndAkt > 1)
 			{
 				IndAkt--;
 			}
 		}
 		System.out.println(IndAkt+" - "+IndMax);
 		 		
 		if (IndAkt <= IndMax)
 		{ 		
	 		tfAVar.setText(AVar.get(IndAkt));
	 		tfWcodes.setText(Wcodes.get(IndAkt));
 		}
 		else
 		{
 			tfAVar.setText("");
 			tfWcodes.setText("");
 		}
 		 		
 		tfIndAkt.setText(String.valueOf(IndAkt));
 		
 		upd = 0;
	}
		
	public void zeige(String plaf)
	{	
	   	wnd.setResizable(false);
		wnd.setLocation(400,250);
		wnd.setSize(350	,115);
	   	wnd.setVisible(true);				
	}
		
	public static void main(String[] args)
	{
	}
}
 
kurt++ hat gesagt.:
die Array Liste habe ich ausprobiert aber irgendwie habe ich mit der viele Probleme:

Du postest Code, aber gibst keinen Kommentar dazu ab. Wie soll man dir da helfen!?

Was funktioniert nicht?
Was macht dein Programm jetzt?
Was soll es machen?
Wird eine Exception geworfen?
Welche Exception wird geworfen?
Wo ist die betreffende Stelle, die Probleme macht?
Inwiefern Probleme?
...?
 
variablennamen KLEIN!

AVar.add(0," "); -> aVar.add(0," "); sowas ist wichtig!
aus welchem grund gibst du einen 0 mit? bewusst so?
 
Ich will zwei Arrays (AVar und Wcodes) füllen. Auf der Maske sind für die Eingabe zwei Textfelder (tfAVar und tfWcodes) drauf, außerdem zwei Buttons (btnZurueck und btnVor) um die Stelle des Textfeldes auszuwählen.

Beginne ich jetzt bei Index = 1 und Tippe dann Hallo ins erste Feld (AVar) und Tschüss ins zweite (Wcodes) füllt er mir die ersten Zwölf Felder wie folgt (System.out.println(i+": "+AVar.get(i)+" - "+Wcodes.get(i))):

1: Hallo - Tschüss
2: Hallo - Tschüs
3: Hallo - Tschü
4: Hallo - Tsch
5: Hallo - Tsc
6: Hallo - Ts
7: Hallo - T
8: Hallo -
9: Hall -
10: Hal -
11: Ha -
12: H -


gewollt ist aber das er nur das 1. füllt....
 
also bei mir gehts:

1: - - *
1: s - - *
1: sd - - *
1: sdf - - *
1: sdf - - *
1: sdf - s - *
1: sdf - sd - *
1: sdf - sdf - *
1: sdf - sdfs - *
1: sdf - sdfsa - *
1: sdf - sdfsad - *
1: sdf - sdfsadf - *
 
Und wenn du jetzt auf den Button ">" klickst und dann da was eingibst und wieder zurück gehen willst?
 
ich glaub der schiebt durch das add immer das Textfeld da rein anstatt es zu überschreiben (Zeile 115/116)... wie bekomme ich den dazu das er das überschreibt (wenn schon eins da ist, und ich Text eingeben habe), es löscht (wenn schon eins da ist, und ich keinen Text eingeben habe) oder neuanlegt(wenn schon eins da ist, und ich Text eingeben habe)?
 
wenn ich weiter gehe steht zwar noch der alte text da aber den kann ich löschen und was anderes rein schreibne und wen nich zurück gehe steht wieder der alte text da.

wobei deine klasse war nicht kompilierbar, eclipse hat einwenig was mit den imports gemacht, vielleicht liegts daran:

Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.Container;
import javax.swing.event.*;
import java.util.ArrayList;


public class PKONV0003 extends JFrame implements ActionListener, CaretListener {

	private JTextField			tfWcodes	= new JTextField(25);
	private JTextField			tfAVar		= new JTextField(5);
	private JTextField			tfIndAkt	= new JTextField(2);
	private JTextField			tfIndMax	= new JTextField(2);
	private JButton				btnVor		= new JButton(">");
	private JButton				btnZurueck	= new JButton("<");

	private static int			IndMax		= 1;
	private static int			IndAkt		= 1;
	private static int			upd			= 0;

	private ArrayList<String>	AVar		= new ArrayList<String>();
	private ArrayList<String>	Wcodes		= new ArrayList<String>();

	private static PKONV0003	wnd			= new PKONV0003();

	public PKONV0003() {
		super("Eingabe der Werbecodes");

		Container contentPane = getContentPane();
		contentPane.setLayout(new GridLayout(3, 1));

		// Zeile 1:

		JPanel zeile1 = new JPanel();
		zeile1.setLayout(new GridLayout(1, 2));

		JLabel lblAVar = new JLabel("  Ausgabevariante:", SwingConstants.LEFT);
		zeile1.add(lblAVar);
		tfAVar.addCaretListener(this);
		tfWcodes.setToolTipText("Eingabe der Ausgabevariante");
		zeile1.add(tfAVar);

		zeile1.setBorder(BorderFactory.createEtchedBorder());
		contentPane.add(zeile1);

		// Zeile 2:

		JPanel zeile2 = new JPanel();
		zeile2.setLayout(new GridLayout(1, 2));

		JLabel lblWcodes = new JLabel("  Werbecodes:", SwingConstants.LEFT);
		zeile2.add(lblWcodes);
		tfWcodes.addCaretListener(this);
		tfWcodes.setToolTipText("Eingabe der Werbecodes");
		zeile2.add(tfWcodes);

		zeile2.setBorder(BorderFactory.createEtchedBorder());
		contentPane.add(zeile2);

		// Zeile 3:

		JPanel zeile3 = new JPanel();
		zeile3.setLayout(new FlowLayout());

		btnZurueck.setToolTipText("Zurück");
		btnZurueck.addActionListener(this);
		zeile3.add(btnZurueck);

		tfIndAkt.setToolTipText("Springe zu...");
		tfIndAkt.addActionListener(this);
		tfIndAkt.setText("1");
		zeile3.add(tfIndAkt);

		JLabel lblFlash = new JLabel("  /", SwingConstants.LEFT);
		zeile3.add(lblFlash);

		tfIndMax.setEditable(false);
		tfIndMax.setText("1");
		zeile3.add(tfIndMax);

		btnVor.setToolTipText("Vor");
		btnVor.addActionListener(this);
		zeile3.add(btnVor);

		zeile3.setBorder(BorderFactory.createEtchedBorder());
		getContentPane().add(zeile3);

		AVar.add(0, " ");
		Wcodes.add(0, " ");
	}

	public void caretUpdate(CaretEvent event) {

		if (upd == 0) {
			AVar.add(IndAkt, tfAVar.getText());
			Wcodes.add(IndAkt, tfWcodes.getText());

			System.out.println(IndAkt + ": " + AVar.get(IndAkt) + " - " + Wcodes.get(IndAkt) + " - *");

			IndMax = Wcodes.size();
			tfIndMax.setText(String.valueOf(IndAkt));
		}
	}

	public void actionPerformed(ActionEvent event) {
		upd = 1;

		String cmd = event.getActionCommand();
		// System.out.println(cmd);

		if (cmd == ">") {
			if (IndAkt <= IndMax) {
				IndAkt++;
			}
		}
		if (cmd == "<") {
			if (IndAkt > 1) {
				IndAkt--;
			}
		}
		System.out.println(IndAkt + " - " + IndMax);

		if (IndAkt <= IndMax) {
			tfAVar.setText(AVar.get(IndAkt));
			tfWcodes.setText(Wcodes.get(IndAkt));
		} else {
			tfAVar.setText("");
			tfWcodes.setText("");
		}

		tfIndAkt.setText(String.valueOf(IndAkt));

		upd = 0;
	}

	public void zeige(String plaf) {
		wnd.setResizable(false);
		wnd.setLocation(400, 250);
		wnd.setSize(350, 115);
		wnd.setVisible(true);
	}

	public static void main(String[] args) {
		PKONV0003 p = new PKONV0003();
		p.zeige(null);
	}
}
 
ja dann kannst du das zwar wieder überschreiben aber er fügt dann munter weiter ein statt zu überschreiben, wenn du im ersten zum Beispiel 12 schreibst, dann ist die Tabelle schon zwei groß einmal "12" und einmal "1", willst du die "1" überschreiben zum Beispiel mit "23", dann hängt der zwischen "12" und "1" einfach noch die felder "23", "2" und " " dran. das ist das problem, das er die nicht ersetzt...

ich möchte also immer wieder die Felder Removen und dann neu einfügen, oder gibt es hierfür eine bessere Lösung?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben