hallo leute,
wir haben an unserer uni (erstes semester) folgendes zu lösen. ich denk mal wir sind ziemlich weit alleine gekommen und wir haben hier heute mittag schonmal um hilfe gebeten. im folgenden die fragestellung, mein kompletter quelltext und mein problem damit. ich bitte (und bedanke mich schonmal) für laienverständliche (!!) hilfe
soll heißen: uns ist nicht viel mehr syntax bekannt als unten verwendet wird
da dies mein erster eintrag in diesem forum ist verzichte ich aus faulheit ersmal
fragestellung:
Ihre Aufgabe: Passwortgeschützter Text
In einer speziellen Datenkonstruktion soll ein Text abgelegt werden (in einem späteren
Projektstadium wird dieser auf die Festplatte gelegt werden(anmerkung von mir: der text kann als objekt während der laufzeit im ram gespeichert werden; er muss nicht auf die festplatte gespeichert, aber denoch gekapselt gespeichert werden)) und mittels Passwort vor
ungewollten Zugriff geschützt werden.
Schreiben Sie eine Applikation, die eine einzugebende Anzahl an entsprechenden Objekten
der Klasse Daten enthält, deren Textinhalt über Zugriffsmodifikatoren nach außen gekapselt
ist.
Erst nach Eingabe eines gültigen Passwortes, das über entsprechende Objekte der Klasse
Passwort verwaltet und geprüft wird, soll der Benutzer den Text angezeigt bekommen.
Nach der dreimaligen falschen Eingabe eines Passwortes erhält der Benutzer über ein weiteres
Masterpasswort dreimal die Gelegenheit das nun gesperrte Passwort wieder freizugeben.
Gelingt auch dies nicht, wird der Inhalt des Datenobjektes gelöscht.
Zur Vorgehensweise:
Bevor Sie Ihr Programm schreiben, erstellen Sie bitte entsprechende Klassendiagramme aller
benötigten Klassen.
Da Ihr Projekt ganz oder teilweise auch von Anderen bearbeitet werden soll, definieren Sie
bitte für alle Klassen, aus denen Objekte angelegt werden sollen, entsprechende Interfaces,-
auch hier bitte auf die Dokumentation achten.
Um eine Fehlentwicklung Ihres Projektes wegen falscher Interfaces zu vermeiden, nehmen
Sie bitte frühzeitig Rücksprache wegen Ihres Enwicklungsstandes.
Erstellen Sie Ihre Programme (ausschließlich) unter Verwendung von sprechenden Namen
und kommentieren Sie Ihren Quellcode so ausführlich, dass Ihr Vorgehen ohne
Programmierkenntnisse nachvollziehbar ist.
Beachten Sie die Java-Codekonventionen.
mein quelltext:
import javax.swing.*;
public class Main2{
public static void main(String[] args){
//Masterpasswort setzten
Master master=new Master(JOptionPane.showInputDialog(null, "Geben sie das Masterpasswort ein."));
//nötige Deklarationen
int anzahlObjekte=-1, click=0;boolean masterwert=false;
//do-whileschleife
do {
JOptionPane.showMessageDialog(null, "Erstellen sie mindestens einen Text!");
String a=JOptionPane.showInputDialog(null, "Wieviele Texte wollen sie verschlüsseln?");
anzahlObjekte=Integer.parseInt(a);
} while (anzahlObjekte<1 );
Texte[] text=new Texte[anzahlObjekte];
for (int i=0;i<anzahlObjekte ;i++ ) {
text=new Texte(JOptionPane.showInputDialog(null, "Geben sie Text "+(i+1)+" von "+anzahlObjekte+ " ein."),JOptionPane.showInputDialog(null, "Geben sie einen Schlüssel ein."));
}
do{
JTextField[] feld={new JTextField("0"),new JTextField("0")};
Object[] msg={"Geben sie die Nummer des zu entschlüsselnden Textes ein.",feld[0],"Geben sie den Schlüssel ein.",feld[1]};
click=JOptionPane.showConfirmDialog(null, msg);
int arrayIndexZahl=(Integer.parseInt(feld[0].getText()))-1;
String pwUser=feld[1].getText();
String ausgabe= text[arrayIndexZahl].getSchluesselstring(arrayIndexZahl, pwUser);
JOptionPane.showMessageDialog(null, ausgabe);
}while(click==0);
JOptionPane.showMessageDialog(null, "Das Programm wird beendet.");
}
}
import javax.swing.*;
public class Texte extends Main2
{
int anzahlObjekte; Master master;
private String[] texte=new String[anzahlObjekte];
private String[] passwoerter=new String[anzahlObjekte];
private int[] versuche=new int[anzahlObjekte];
String text;
String passwort;
public Texte(String text, String passwort){
this.text=text;this.passwort=passwort;
plazierePasswort(passwort);
plaziereText(text);
this.text=null;this.passwort=null;text=null;passwort=null;
for(int i=0; i<anzahlObjekte; i++){
this.versuche=3;
}
}
public String getSchluesselstring(int arrayIndexZahl,String pwUser){
String ausgabe="Fehler";
String pwString=passwoerter[arrayIndexZahl];
if(pwString.equals(pwUser)){
ausgabe=texte[arrayIndexZahl];
}else{
versuche[arrayIndexZahl]-=1;
if(versuche[arrayIndexZahl]==0){
for(int i=2;i==0;i--){
boolean masterwert=false;
masterwert=master.masterWert(JOptionPane.showInputDialog(null, "Masterpasswort? Versuch "+(i+1)));
if(masterwert==true){
passwoerter[arrayIndexZahl]= JOptionPane.showInputDialog(null, "Geben Sie ein neues Passwort ein");
}if(i==0){
texte[arrayIndexZahl]=null;ausgabe="Sie haben das Passwort dreimal falsch eingegeben.\nText "+arrayIndexZahl+" wurde gelöscht.";
}
}
}else{
ausgabe="Ihre Eingabe war fehlerhaft. Sie haben noch *"+versuche[arrayIndexZahl]+ "Versuche.";
}
};
return ausgabe;
}
private void plazierePasswort(String passwort){
for(int i=0;i<anzahlObjekte;i++){
if(this.passwoerter==null){
this.passwoerter=passwort;
}
};
}
private void plaziereText(String text){
for(int i=0;i<anzahlObjekte;i++){
if(this.texte==null){
this.texte=text;
}
};
}
}
public class Master {
public String master;
public Master(String master){
this.master=master;
}
public boolean masterWert(String masterUser){
boolean masterwert=false;
if(this.master.equals(masterUser)){
masterwert=true;
}
return masterwert;
}
}
Mein problem:
ich erhalte (wenn ich nach programmstart(ich nutze den JavaEditor) überall "1" eingebe) folgenden laufzeitfehler:
Starte C:\Dokumente und Einstellungen\PC\Desktop\test\Main2.java
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Texte.getSchluesselstring(Texte.java:24)
at Main2.main(Main2.java:32)
ich verstehe darunter nur, dass eines meiner arrays um den wert "0" zu groß oder zu klein ist
.....ergo: kacke °__°_°_°__°_°_°
ich komme nicht weiter und bitte um hilfe...^^ nochmals danke im vorraus...
ich denke mal ich hab alles notwendige gepostet..(tut mir leid dass die kommentare auf der strecke geblieben sind ich hatte keinen nerv mehr ...) also bitte nicht sauer sein wenn ich nicht alle 5 minuten antworten werde
wir haben an unserer uni (erstes semester) folgendes zu lösen. ich denk mal wir sind ziemlich weit alleine gekommen und wir haben hier heute mittag schonmal um hilfe gebeten. im folgenden die fragestellung, mein kompletter quelltext und mein problem damit. ich bitte (und bedanke mich schonmal) für laienverständliche (!!) hilfe
soll heißen: uns ist nicht viel mehr syntax bekannt als unten verwendet wird
da dies mein erster eintrag in diesem forum ist verzichte ich aus faulheit ersmal
fragestellung:
Ihre Aufgabe: Passwortgeschützter Text
In einer speziellen Datenkonstruktion soll ein Text abgelegt werden (in einem späteren
Projektstadium wird dieser auf die Festplatte gelegt werden(anmerkung von mir: der text kann als objekt während der laufzeit im ram gespeichert werden; er muss nicht auf die festplatte gespeichert, aber denoch gekapselt gespeichert werden)) und mittels Passwort vor
ungewollten Zugriff geschützt werden.
Schreiben Sie eine Applikation, die eine einzugebende Anzahl an entsprechenden Objekten
der Klasse Daten enthält, deren Textinhalt über Zugriffsmodifikatoren nach außen gekapselt
ist.
Erst nach Eingabe eines gültigen Passwortes, das über entsprechende Objekte der Klasse
Passwort verwaltet und geprüft wird, soll der Benutzer den Text angezeigt bekommen.
Nach der dreimaligen falschen Eingabe eines Passwortes erhält der Benutzer über ein weiteres
Masterpasswort dreimal die Gelegenheit das nun gesperrte Passwort wieder freizugeben.
Gelingt auch dies nicht, wird der Inhalt des Datenobjektes gelöscht.
Zur Vorgehensweise:
Bevor Sie Ihr Programm schreiben, erstellen Sie bitte entsprechende Klassendiagramme aller
benötigten Klassen.
Da Ihr Projekt ganz oder teilweise auch von Anderen bearbeitet werden soll, definieren Sie
bitte für alle Klassen, aus denen Objekte angelegt werden sollen, entsprechende Interfaces,-
auch hier bitte auf die Dokumentation achten.
Um eine Fehlentwicklung Ihres Projektes wegen falscher Interfaces zu vermeiden, nehmen
Sie bitte frühzeitig Rücksprache wegen Ihres Enwicklungsstandes.
Erstellen Sie Ihre Programme (ausschließlich) unter Verwendung von sprechenden Namen
und kommentieren Sie Ihren Quellcode so ausführlich, dass Ihr Vorgehen ohne
Programmierkenntnisse nachvollziehbar ist.
Beachten Sie die Java-Codekonventionen.
mein quelltext:
import javax.swing.*;
public class Main2{
public static void main(String[] args){
//Masterpasswort setzten
Master master=new Master(JOptionPane.showInputDialog(null, "Geben sie das Masterpasswort ein."));
//nötige Deklarationen
int anzahlObjekte=-1, click=0;boolean masterwert=false;
//do-whileschleife
do {
JOptionPane.showMessageDialog(null, "Erstellen sie mindestens einen Text!");
String a=JOptionPane.showInputDialog(null, "Wieviele Texte wollen sie verschlüsseln?");
anzahlObjekte=Integer.parseInt(a);
} while (anzahlObjekte<1 );
Texte[] text=new Texte[anzahlObjekte];
for (int i=0;i<anzahlObjekte ;i++ ) {
text=new Texte(JOptionPane.showInputDialog(null, "Geben sie Text "+(i+1)+" von "+anzahlObjekte+ " ein."),JOptionPane.showInputDialog(null, "Geben sie einen Schlüssel ein."));
}
do{
JTextField[] feld={new JTextField("0"),new JTextField("0")};
Object[] msg={"Geben sie die Nummer des zu entschlüsselnden Textes ein.",feld[0],"Geben sie den Schlüssel ein.",feld[1]};
click=JOptionPane.showConfirmDialog(null, msg);
int arrayIndexZahl=(Integer.parseInt(feld[0].getText()))-1;
String pwUser=feld[1].getText();
String ausgabe= text[arrayIndexZahl].getSchluesselstring(arrayIndexZahl, pwUser);
JOptionPane.showMessageDialog(null, ausgabe);
}while(click==0);
JOptionPane.showMessageDialog(null, "Das Programm wird beendet.");
}
}
import javax.swing.*;
public class Texte extends Main2
{
int anzahlObjekte; Master master;
private String[] texte=new String[anzahlObjekte];
private String[] passwoerter=new String[anzahlObjekte];
private int[] versuche=new int[anzahlObjekte];
String text;
String passwort;
public Texte(String text, String passwort){
this.text=text;this.passwort=passwort;
plazierePasswort(passwort);
plaziereText(text);
this.text=null;this.passwort=null;text=null;passwort=null;
for(int i=0; i<anzahlObjekte; i++){
this.versuche=3;
}
}
public String getSchluesselstring(int arrayIndexZahl,String pwUser){
String ausgabe="Fehler";
String pwString=passwoerter[arrayIndexZahl];
if(pwString.equals(pwUser)){
ausgabe=texte[arrayIndexZahl];
}else{
versuche[arrayIndexZahl]-=1;
if(versuche[arrayIndexZahl]==0){
for(int i=2;i==0;i--){
boolean masterwert=false;
masterwert=master.masterWert(JOptionPane.showInputDialog(null, "Masterpasswort? Versuch "+(i+1)));
if(masterwert==true){
passwoerter[arrayIndexZahl]= JOptionPane.showInputDialog(null, "Geben Sie ein neues Passwort ein");
}if(i==0){
texte[arrayIndexZahl]=null;ausgabe="Sie haben das Passwort dreimal falsch eingegeben.\nText "+arrayIndexZahl+" wurde gelöscht.";
}
}
}else{
ausgabe="Ihre Eingabe war fehlerhaft. Sie haben noch *"+versuche[arrayIndexZahl]+ "Versuche.";
}
};
return ausgabe;
}
private void plazierePasswort(String passwort){
for(int i=0;i<anzahlObjekte;i++){
if(this.passwoerter==null){
this.passwoerter=passwort;
}
};
}
private void plaziereText(String text){
for(int i=0;i<anzahlObjekte;i++){
if(this.texte==null){
this.texte=text;
}
};
}
}
public class Master {
public String master;
public Master(String master){
this.master=master;
}
public boolean masterWert(String masterUser){
boolean masterwert=false;
if(this.master.equals(masterUser)){
masterwert=true;
}
return masterwert;
}
}
Mein problem:
ich erhalte (wenn ich nach programmstart(ich nutze den JavaEditor) überall "1" eingebe) folgenden laufzeitfehler:
Starte C:\Dokumente und Einstellungen\PC\Desktop\test\Main2.java
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Texte.getSchluesselstring(Texte.java:24)
at Main2.main(Main2.java:32)
ich verstehe darunter nur, dass eines meiner arrays um den wert "0" zu groß oder zu klein ist
.....ergo: kacke °__°_°_°__°_°_°
ich komme nicht weiter und bitte um hilfe...^^ nochmals danke im vorraus...
ich denke mal ich hab alles notwendige gepostet..(tut mir leid dass die kommentare auf der strecke geblieben sind ich hatte keinen nerv mehr ...) also bitte nicht sauer sein wenn ich nicht alle 5 minuten antworten werde