Array eintrag mit möglichst wenig code lösen

Diskutiere Array eintrag mit möglichst wenig code lösen im Java Basics - Anfänger-Themen Bereich.
J

jan21

Ich arbeite gerade an einem programm welches die Namen welche in ein Textfeld eingegeben wurden in einem array speichern soll wenn die eingabe durch einenen Knopf bestätigt wurde . Ist es möglich das der wert von i um eines erhöht wird so das der nächste name automatisch auf der zweiten index position gespeichert wird ?

Java:
        String [] names = new String [5];
        int i = 0;
   
ActionListener al = new ActionListener () {
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (e.getSource()== Speichern) {
            names[i] = Name.getText();
               
        }
       
    }
};

Show.addActionListener(al);
Speichern.addActionListener(al);
 
mihe7

mihe7

Erstmal die obligatorische Bitte: halte Dich an die Benennungskonventionen von Java, d. h. Bezeichner für Variablen, Parameter und Methoden in lowerCamelCase und für Typen (Klassen & Co.) in UpperCamelCase. Dein Code ist ansonsten schwer zu lesen bzw. missverständlich (Name.getText() deutet z. B. auf eine Klasse mit einer statischen Methoden getText hin, obwohl es vermutlich einfach nur eine Variable vom Typ JTextField ist).

Dann: stehen die Namen denn in einem Textfeld oder in mehreren?

i erhöhen geht einfach mit i++ oder i+=1 oder i = i+1 - such Dir eins aus :)
 
J

jan21

Die Namen sollen einzelnd in ein Textfeld eingetragen werden
An welche stelle kann das i++ gesetzt wenn ich es unter die Zeile mit Name.getText wird mir der fehler : Local variable i defined in an enclosing scope must be final or effectively final angezeigt
 
X

Xyz1

Zweite Möglichkeit: Du speicherst die names in einer ArrayList vom Typ final ArrayList<String> names = ....
 
T

thecain

names[i++] = ...
Beim sechsten Mal speichern wirst du einfach einen Fehler erhalten...
 
K

kneitzel

Die Namen sollen einzelnd in ein Textfeld eingetragen werden
An welche stelle kann das i++ gesetzt wenn ich es unter die Zeile mit Name.getText wird mir der fehler : Local variable i defined in an enclosing scope must be final or effectively final angezeigt
Die Variable i ist eine lokale Variable und lokale Variablen, die man in einer inner class verwendet, dürfen nicht verändert werden.

Wieso nutzt Du keine Instanzvariablen? Es geht doch bei dem Array und der Variablen um Dinge, die Du generell haben willst und nicht nur lokal in einer Methode.

Und i solltest Du Dir einen sinnvollen Namen überlegen ....
 
K

kneitzel

In ein Textfeld werden also "Elsa Hans Franz Matthias Lisa" eingetragen? Dann: names = textfeld.getText().split("\\s");
Von seinem Code ausgehend ist es eher so, dass immer nur ein Name eingegeben wird, dann wird ein Button gedrückt und dann kann der nächste Name eingegeben werden ....
 
mihe7

mihe7

Ach, so.... ich steh irgendwie auf der Leitung. Dann hast Du eh schon alles gesagt :)
 
J

jan21

wenn ich
Code:
        String [] names = new String[5];
        int i = 0;
       
ActionListener al = new ActionListener () {
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (e.getSource()== Speichern) {
            names[i++] = Name.getText();
        }
        if (e.getSource()==Show) {
            System.out.print(names);
        }  
       
    }
Nutze wird mir immer noch angezeigt : Local variable i defined in an enclosing scope must be final or effectively final
Stehe gerade glaube ich etwas auf dem schlauch
 
mihe7

mihe7

Java:
import java.awt.BorderLayout;
import javax.swing.*;

import java.util.StringJoiner;

public class Test {
    private String[] names = new String[5];
    private int currentName;

    private JLabel inputPrompt;
    private JLabel output;
    
    public void run() {
        inputPrompt = new JLabel("Name:");

        JPanel input = new JPanel();
        JTextField name = new JTextField(40);
        JButton okButton = new JButton("OK");

        input.add(inputPrompt);
        input.add(name);
        input.add(okButton);

        output = new JLabel();

        okButton.addActionListener(e -> saveName(name.getText()));
        updateUI();

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(input, BorderLayout.NORTH);
        frame.add(output);

        frame.pack();
        frame.setVisible(true);        
    }

    private void saveName(String name) {
        names[currentName] = name;
        currentName = (currentName + 1) % names.length;
        updateUI();
    }

    private void updateUI() {
        updateOutput();
        updatePrompt();
    }

    private void updatePrompt() {
        inputPrompt.setText(String.format("Name %d: ", currentName+1));
    }

    private void updateOutput() {
        StringJoiner j = new StringJoiner("<br>");
        for (int i = 0; i < names.length; i++) {
            j.add(names[i] == null ? "&nbsp;" : names[i]);
        }
        output.setText("<html>" + j.toString() + "</html>");
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 
K

kneitzel

@mrBrown Habe ich gemacht mir wird nach wie vor der gleiche fehler angezeigt
Dann zeig deinen Code, wie er jetzt ist. Die Fehlermeldung besagt, dass du immer noch eine lokale Variable nutzt.

Hast du evtl. eine Instanzvariable i hinzugefügt aber du hast immer noch die lokale Variable weil du das int bei der Zuweisung nicht entfernt hast?
 
J

jan21

@knietzel hattest recht hatte das int nicht entfernt jezt geht es aber
Danke für eure Hife
 
Thema: 

Array eintrag mit möglichst wenig code lösen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben