Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
So gesehen hat jedes Array eine Länge (schließlich muss das System wissen, wieviel RAM benötigt wird), die so erstmal feststeht. Für dein Problem fallen mit spontan diese Lösungen ein:
- ArrayList verwenden (Größe ist variabel)
- Bei jeder neuen Zahl ein neues array (Länge +1) anlegen und den alten Inhalt kopieren, letztes Element ist dann die neue Zahl (nicht sehr effizient)
- ein Array mit Platz für viele Elemente anlegen und nur soweit belegen, wie benötigt (ebenfalls ineffizient und resourcenlastig)
hab das schnell mal eben geschrieben. Dann kannst dich daran etwas orietieren bzw. deinen Bedürfnissen / Vorgaben anpassen.
Hier der Code:
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package pkg134;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
*
* @author dominik
*/
public class Main extends JFrame implements ActionListener {
private static JPanel panel = new JPanel();
private static int width, height;
private int checkNumber;
private JButton button;
private JTextField textfield;
private ArrayList <Integer> arrayList = new ArrayList <Integer> ();
public Main(){
width = 150; //groeße des Frames
height = 100;// " " "
checkNumber = 134; //die kannst du dann ja deinen wuenschen anpassen ...
initSwingForms(); //initieren der Swingformen Button und TextField
setSwingForms(); //Einstellungen setzen wie groeße und Position
addSwingForms(); //Formen dem Panel hinzufuegen
}
public void initSwingForms(){
button = new JButton("Bestätigen");
textfield = new JTextField("Gib eine Zahl ein ...");
}
public void setSwingForms(){
//button kannst du hier selber zurechtrücken und ebenso das textfeld
//button.setSize();
//button.setLocation();
//button einen ActionListener hinzufuegen um klicks zu registrieren
button.addActionListener(this);
//fields
//textfield.setSize();
//textfield.setLocation();
}
private void addSwingForms(){
panel.add(textfield);
panel.add(button);
}
public static void main(String[] args) {
Main frame = new Main();//Frame erzeugen
frame.setSize(width, height);//groeße setzen
frame.setDefaultCloseOperation(EXIT_ON_CLOSE); // damit sich das Programm später richtig schließt
frame.add(panel); // auf das Panel gezeichnete SwingFormen dem Frame hinzufuegen
frame.setVisible(true); //frame sichtbar machen
}
//alle eintraeger der arraylist ueberpruefen lassen - macht sinn wenn du die positionen switchen willst
private void checkAll(int n){
for(int x=0; x < arrayList.size(); x++){
if(arrayList.get(x) == n){
JOptionPane.showMessageDialog(null, "Die Zahl " + n + " wurde gefunden!");
}
}
}
//check nur den letzten eintrag - bessere performance
private void checkLast(int n){
int temp = arrayList.size();
if(arrayList.get(temp) == n){
JOptionPane.showMessageDialog(null, "Die Zahl " + n + " wurde gefunden!");
}
}
@Override
public void actionPerformed(ActionEvent e) {
//prueft ob button geklickt wurde
if(e.getSource() == button){
//fuegt der arraylist an letzter position hinzu
arrayList.add(Integer.valueOf(textfield.getText()));
//fuehrt check aus
checkLast(checkNumber);
}
}
}
Hoffe das hilft dir weiter. Über ein Daumenhoch würde ich mich freuen
Wow ich muss @Ch4t4r einfach recht geben. Dieser Code den du geliefert hast @Anfänger2011 ist einfach nichts zum herzeigen. Damit hilfst du keinem.
Paar Punkte:
Man leitet nicht von JFrame ab
Anonyme ActionListener-Codes reichen völlig aus
Alle Felder unnötig
static falsch verwendet
deine CheckLast-Methode sinnlos (warum nicht gleich überprüfen?)
Man implementiert gegen Interfaces (List<...> list = new ArrayList<>();)
Sprechende Namen für Klassen wählen
Warum eigentlich eine Swing-Anwendung? Es reicht für so eine Übung wirklich nur eine Konsolenanwendung und mehr wurde auch nicht gefordert.
Danke das ist ja gut zu wissen. Bis jetzt hab ich das immer so mit guten Gewissens wie in meinen Buch gemacht. Also abgesehen von dem schlecht gewählten Klassennamen und der relativ unnötigen Methode Checklast natürlich.
Ja die Bücher und solche Swing-Sachen. Keine Ahnung warum die immer von JFrame (und ActionListener implementieren) ableiten, aber ich nehme an, dass das Tutorial dann in eine Klasse passt.
Ich glaube es gibt keine Regel, "nicht von JFrame abzuleiten", sondern man sollte sich überlegen, wann man grundsätzlich von einer Klasse ableitet (bspw. du möchtest die Klasse von der Du ableitest erweitern oder überschreiben). In Deinem Fall gibt es keine Grund abzuleiten, da Du JFrame lediglich instanzierst.
Ist schon eine Weile her, da ich auf Urlaub war, aber ich möchte hier auf diesen Thread verweisen, der sehr gut erklärt, warum "Composition over Inheritance" besser ist: HIER.