# Array-Programm für Safe-Kombination



## Dose (12. Jan 2011)

Hallo zusammen
mein Kollege und ich müssen für unser Studium ein Programm in Java schreiben!Leider haben wir absolut keine Ahnung wie wir anfangen bzw zu einem Ende kommen!
Hier mal die Anweisung:
Richten sie ein Array mit drei Ziffern zum Öffnen eines Safes ein. Fordern Sie den Benutzer auf, nacheinander drei Ziffern über die Schaltflächen mit den Bezeichnungen 0 bis 4 einzugeben. Wenn eine Ziffer eingegeben wird, dann teilen Sie dem Benutzer mit, ob sie richtig oder falsch ist, und geben Sie ihm drei Versuche, bevor der wieder von vorne anfangen muss.

Wir haben angefangen das ganze in ein Formular zu packen aber irgendwie kommen wir ingesamt auf keinen grünen Zweig.
Wir hoffen das ihr uns helfen könnt und sagen schon mal Herzlichen Dank


----------



## bygones (12. Jan 2011)

zeig doch mal code ... bzw ein paar konkrete Fragen würden helfen zu helfen

"ganze in ein Formular"... das klingt merkwürdig - redest du von Java oder JavaScript ?!


----------



## Wrakas (12. Jan 2011)

Ihr braucht 4 Buttons, daran hängt ihr einen Event Handler der für alle Buttons zuständig ist. Bei Click eines Buttons prüft ihr welcher das war, vergleicht z.B. erster Button 0 mit dem ersten Array Eintrag.

Wenn richtig dann weiter (und merken das er die erste Zahl richtig hat, damit beim nächsten Button klick die zweite Array Zahl verglichen wird)

Wenn falsch anzahl der Versuch merken.

... and so on ...


----------



## Dose (12. Jan 2011)

Danke Wrakas
kannst du uns vielleicht mit dem Code weiterhelfen?


----------



## Andi_CH (12. Jan 2011)

Hilf du uns erst mal mit deinem Code weiter! Was hast du schon?


----------



## Dose (12. Jan 2011)

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * safeneuer.java
 *
 * Created on 12.01.2011, 16:37:21
 */

package safeneuer;

/**
 *
 * @author dose
 */
public class safeneuer extends javax.swing.JApplet {

    /** Initializes the applet safeneuer */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /** This method is called from within the init() method to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();

        getContentPane().setLayout(null);

        jButton1.setText("1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);
        jButton1.setBounds(10, 20, 75, 29);

        jButton2.setText("2");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton2);
        jButton2.setBounds(180, 20, 75, 29);

        jButton3.setText("3");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton3);
        jButton3.setBounds(10, 70, 75, 29);

        jButton4.setText("4");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton4);
        jButton4.setBounds(180, 70, 75, 29);
    }// </editor-fold>                        

private int Kombination = 321;
private int [] Raten;
private int [] Reihenfolge;
private int Fehlversuche;


    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        // TODO add your handling code here:
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        


}

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    // End of variables declaration                   

}
```


----------



## Tomate_Salat (12. Jan 2011)

Immerhin haste den GUI-Editor gefunden :-/. 
Konventionen: 
für Klassen verwendet man UpperCamelCase:
safeneuer => SafeNeuer
für Variablen lowerCamelCase:
Kombinationen => kombinationen



> richten sie ein Array mit drei Ziffern zum Öffnen eines Safes ein




```
private int[] kombination = {3,2,1};
```

Ansonsten: Du holst dir den Wert aus einem Textfeld, prüfst ob es eine Zahl und diese im validen Bereich ist + checkst Sie mit dem Wert im Array (denke daran: kombinationen[0] ist 3 und kombinationen[2] ist 1).

Wenn du mehr Hilfe brauchst: frag gezielter nach. So ist das noch viel zu Allgemein gehalten, deswegen auch nur eine allgemeine Antwort

mfg

Tomate_Salat


----------



## Dose (12. Jan 2011)

Danke für die nützlichen Tipps erstmal
-Wie hole ich mir den Wert aus einem Textfeld?
-Wie prüfe ich ob es eine Zahl ist und ob sie im angegeben Bereich liegt?
-Wie checke ich die Zahl mit dem Wert im Array?
Sorry wir sind die absoluten Frischlinge und ich hab des gefühlt das wir von unserem Prof ziemlich
alleine gelassen werden!
Gott sei Dank wird uns hier geholfen, echt super von euch!


----------



## Tomate_Salat (12. Jan 2011)

erstmal eine Gegenfrage: ist ein GUI pflicht oder tut es ein Konsolenprogramm...weil wenn ein GUI keine Pflicht ist....lass die Finger davon. Eignet euch Grundlagen an, bevor Ihr euch mit GUIs beschäftigt.


----------



## Dose (12. Jan 2011)

Also unser Prof sagte gerade das ein GUI Pflicht ist bzw die eleganteste Lösung sei


----------



## Wrakas (12. Jan 2011)

Ich habe es mal ohne Textfeld gemacht... (wie die Aufgabe beschrieben ist)


```
import java.awt.FlowLayout;
import java.awt.event.*;

import javax.swing.*;

public class save {
	int[] code = {3,2,1};
	int richtige = 0;
	int falsche = 0;
	boolean berechtigt = true;
	
	JLabel lblAnweisung;
	
	public static void main(String[] args) {
		save gui = new save();
		gui.start();
	}
	
	public void start(){
		
		JFrame fenster = new JFrame();
		lblAnweisung = new JLabel("Bitte Code eingeben!");
		JButton btnNull = new JButton("0");
		JButton btnEins = new JButton("1");
		JButton btnZwei = new JButton("2");
		JButton btnDrei = new JButton("3");
		JButton btnVier = new JButton("4");
		
		ButtonLauscher Lauscher = new ButtonLauscher();
		
		btnNull.addActionListener(Lauscher);
		btnEins.addActionListener(Lauscher);
		btnZwei.addActionListener(Lauscher);
		btnDrei.addActionListener(Lauscher);
		btnVier.addActionListener(Lauscher);
		
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.setLayout(new FlowLayout());
		
		fenster.getContentPane().add(lblAnweisung);
		fenster.getContentPane().add(btnNull);
		fenster.getContentPane().add(btnEins);
		fenster.getContentPane().add(btnZwei);
		fenster.getContentPane().add(btnDrei);
		fenster.getContentPane().add(btnVier);
		fenster.setSize(500,80);
		fenster.setVisible(true);
	}
	class ButtonLauscher implements ActionListener{
		public void actionPerformed(ActionEvent event){
			int eingabe = Integer.parseInt(event.getActionCommand());
			
			if (berechtigt){
				if(code[richtige] == eingabe){
					richtige++;
					if(richtige<3){
						lblAnweisung.setText(richtige + " Richtig; " + falsche + " Falsch");
					}else{
						lblAnweisung.setText("Der Code ist richtig");
					}
				}else{
					falsche++;
					if(falsche<3){
						lblAnweisung.setText(richtige + " Richtig; " + falsche + " Falsch");
					}else{
						lblAnweisung.setText("3 mal falsch eingegeben bitte neu starten");
						berechtigt = false;
					}
				}
			}

		}
	}
}
[/Java]
```


----------



## Tomate_Salat (12. Jan 2011)

Tomate_Salat hat gesagt.:


> Konventionen:
> für Klassen verwendet man UpperCamelCase:
> safeneuer => SafeNeuer
> für Variablen lowerCamelCase:
> Kombinationen => kombinationen



So schwer sind die auch nicht einzuhalten :noe:. Als wie wenn ich es nie in diesem Thread gepostet hätte:
save => Save
Lauscher => lauscher

und das GUI sollte man über

```
SwingUtilities.invokeLater(new Runnable() {
     @Override
     public void run()
     {
           fenster.setVisible(true);
     }
});
```
starten


----------



## Wrakas (12. Jan 2011)

Tomate_Salat hat gesagt.:


> So schwer sind die auch nicht einzuhalten :noe:. Als wie wenn ich es nie in diesem Thread gepostet hätte:
> save => Save
> Lauscher => lauscher
> 
> ...



Was soll das, wenn ich mich hinsetze und einen Code schreibe der mich nicts angeht will ich dafür nicht noch blöd angeschrieben werden ...


----------



## Tomate_Salat (12. Jan 2011)

Wrakas hat gesagt.:


> Was soll das, wenn ich mich hinsetze und einen Code schreibe der mich nicts angeht will ich dafür nicht noch blöd angeschrieben werden ...



Es geht nicht darum, andere die Hausaufgaben zu machen, sondern Ihnen zu helfen. Insofern ists mir egal ob du dich da hinsetzt und diese machst . Zum anderen: reg dich ab, nimms einfach als konstruktive Kritik und gut ists.


----------



## Final_Striker (12. Jan 2011)

Wrakas hat gesagt.:


> Was soll das, wenn ich mich hinsetze und einen Code schreibe der mich nicts angeht will ich dafür nicht noch blöd angeschrieben werden ...



Das war ein Tipp wie man es besser macht.


----------



## Wrakas (12. Jan 2011)

Sorry ist falsch angekommen. Nichts für ungut ...


----------



## Dose (12. Jan 2011)

Erstmal tausend Dank für den Code wrakas
Mit welchem Programm hast du programmiert?
Wir müssen Netbeans benutzt, hoffe dass der Code
kompatibel ist
Aber nochmal herzlichen Dank für deine Mühen


----------



## Wrakas (12. Jan 2011)

Ist in eclipse geschrieben, ist aber 100% kompatibel.


----------



## Dose (12. Jan 2011)

ok dann hab ich wahrscheinlich einen Fehler gemacht, weil Netbeans mir nämlich in Zeile 18 
folgendes sagt: class save is public, should be declared in a file named save.java
ich hab eins neues projekt mit einer Java-Anwendung geöffnet und dann JFrame-Formular gewählt


----------



## Dose (12. Jan 2011)

wenn ich statt public class save nur class save schreibe funktioniert es problemlos


----------



## Tomate_Salat (12. Jan 2011)

nenne die datei save.java, dann sollte es gehen. Oder in Save.java und bennen die Klasse mittels Refractoring in Save um


----------



## Dose (12. Jan 2011)

Super danke, ohne euch wären wir am Ende gewesen
Danke für eure Hilfe, ganz speziell Wrakas!


----------



## Dose (13. Jan 2011)

Hast du das Programm im GUi-Editor geschrieben?Bei unserem Code haben wir die vier Buttons ja quasi von
Hand eingefügt. Da sieht der Code dann vermutlich ganz anders aus oder Wrakas?


----------

