Übergreifende Variablen?

Red John

Mitglied
Hi Leute,

in meinem Code weist mich der Compiler die ganze Zeit darauf hin, das eine Variable noch nicht initialisiert wäre. Jedoch sobald ich die Initialisierung schreibe, sagt er mir, das sie bereits existiere, ich es also lassen solle.

Java:
import java.lang.Math.*; 
  
public class RSA1{
  
  int prim1,prim2,mod,d,y,i,high,low,e,x;  //Deklaration der Variablen
  
  public static void main (String [] arguments){
    int prim1,prim2,mod,d,y,i,high,low,e,n,x;
    boolean truth;
    String text;
    high = 13; // Man gibt die Obergrenze an
    low = 3; // Man gibt die Untergrenze an
    e = (int) (Math.random()*(high - low) + low); 
    
    System.out.println ("Gib eine Primzahl an");  //Aufforderung eine Primzahl anzugeben
    int p = Kon.readInt ();
    System.out.println ("Gib eine weitere Primzahl an");
    int q = Kon.readInt();
    for(x=2;x<p;x++){                       //  x=2 Startwert; x<p Endwert; x++ Schrittweite
      truth = (p%x==0);                    //  prüfen ob es teilbar ist, wenn der Rest 0 ist
      if (truth==true){
      x=p; } 
      if (truth==true) {
        System.out.println("Die Zahl ist keine Primzahl.");
        System.out.println("END");
        System.exit(0);
      }
      else{
        //System.out.println("Die Zahl ist eine Primzahl.");
      }
    }
    //System.out.println("Die Zahl ist eine Primzahl.");
    for(x=2;x<q;x++){                       //  x=2 Startwert; x<p Endwert; x++ Schrittweite
      truth = (q%x==0);                    //  prüfen ob es teilbar ist, wenn der Rest 0 ist
      if (truth==true){
      x=q; } 
      if (truth==true) {
        System.out.println("Die Zahl ist keine Primzahl.");
        System.out.println("ENDE");
        System.exit(0);
      }
      else{
        //System.out.println("Die Zahl ist eine Primzahl.");
      }
    }
    n = p*q;                                                    //Berechnung von N
    int phi = (p-1)*(q-1);                                          //Berechnung von Phi
    System.out.println("Bitte warten sie!");                                        //Ausgabe von Phi
    mod=0;      
    for(d=2;mod!=1;d++){ 
      i=e*d ;                        // Formel für das Produkt von d*e
      mod = i%phi;                    
      if (mod==1) {                                                       //Wenn i mod phi gleich 1 ergibt, werden 'd' und 'e' ausgegeben        
        System.out.println ("Der private Schlüssel ist: " + d);                             //Ausgabe der Schlüssel
        System.out.println ("Der öffentliche Schlüssel ist: (" + e + ";" + n + ")");
      }
    }
    
    System.out.println("Bitte geben sie den zu verschlüsselnden Text an");
    
    
    char [] c;
    String t=new String(Kon.readString());
    c=t.toCharArray();
    long m = c[0];
    double zahl5;
    System.out.println("Bitte geben sie 'e' an!");
    e = Kon.readInt();
    System.out.println("Bitte geben sie 'n' an!");
    n = Kon.readInt();
    double ergebnis;    
    
    for (i=0;i<c.length;i++) {                      
      m= c[i];
      ergebnis = Math.pow(m,e);
      //System.out.print(ergebnis);
      //ergebnis1 = (int) ergebnis;
      zahl5 = ergebnis % n;
      System.out.println(zahl5);    
    } // end of for
    
    System.out.println("Falls du den Text wieder entschlüsseln möchtest, drücke die '1'; Um zu beenden, drücke die '2'");
    char aa = Kon.readChar();
    if (aa=='1') {
      System.out.println("Bitte gib den privaten Schlüssel d an!");
      int xx = Kon.readInt();
      System.out.println("Bitte gib nun den öffentlichen Schlüssel N an!");
      int yy = Kon.readInt();
      double ergebnis4 = Math.pow(zahl5, xx);
      int ergebnis5 = (int) ergebnis4;
      int mm = ergebnis5 % yy;
      String str = "" + i;
      System.out.print("Der entschlüsselte Text lautet:" +mm);
    } else if(aa=='2'){
      System.out.println("ENDE");
      System.exit(0);
    } // end of if-else
  }
}

Besonders die letzte for-Schleife und die darauf folgende if-Schleife ist relevant.

Es geht um die Variable zahl5, welche in der for-Schleife erst deklariert wird.
 
Zuletzt bearbeitet:

rme

Top Contributor
In Zeile 66 deklarierst du zahl5, allerdings ohne Initialisierung. Die Initialisierung passiert bei dir erst in der Schleife - aber es könnte ja sein, dass der eingegebene String leer ist, sodass die Schleife nicht läuft. Diese Möglichkeit sieht der Compiler und weist dich darauf hin, dass die Variable nach der Schleife möglicherweise uninitialisiert sein kann.

Warum benötigst du zahl5 denn nach der Schleife noch? Sie enthält dann ja den verschlüsselten Text des letzten Zeichens, willst du damit wirklich was anfangen? Wenn du den Text auch wieder entschlüsseln willst, musst du den verschlüsselten Text als Array speichern, sonst kannst du eben nur auf's letzte Zeichen zugreifen.
 

rme

Top Contributor
Vor dem Verschlüsseln ein Array mit der gleichen Größe des Eingabetexts einlesen und innerhalb der Schleife das Ergebnis dort speichern..
 

Red John

Mitglied
Jetzt kommt wieder der Arrayfehler. Was mache ich da bloß immer falsch?

Java:
    char [] c;
    String t=new String(Kon.readString());           //Der zu verschlüsselnde Text wird eingegeben
    c=t.toCharArray();
    long m;
    int anzahl = c.length;
    double zahl5;
    double zahl6[];
    zahl6 = new double [anzahl];
    System.out.println("Bitte geben sie 'e' an!");
    e = Kon.readInt();
    System.out.println("Bitte geben sie 'n' an!");
    n = Kon.readInt();
    double ergebnis;    
    
    for (i=0;i<c.length;i++) {                        //Jeder einzelne Teil des Chararrays wird nithilfe der for-Schleife nach und nach durchgearbeitet
      m= c[i];                                        //und das Ergebnis wird am Ende ausgegeben
      ergebnis = Math.pow(m,e);
      //System.out.print(ergebnis);
      //ergebnis1 = (int) ergebnis;
      zahl5 = ergebnis % n;
      System.out.println(zahl5);    
    } // end of for
    
    System.out.println("Falls du den Text wieder entschlüsseln möchtest, drücke die '1' \nUm zu beenden, drücke die '2'");   //Wahlmöglichkeit, ob man beenden oder entschlüsseln möchte
    int aa = Kon.readInt();
    if (aa==1) {
      System.out.println("Bitte gib den privaten Schlüssel d an!");                          //Private Schlüsseleingabe
      int xx = Kon.readInt();
      System.out.println("Bitte gib nun den öffentlichen Schlüssel N an!");
      int yy = Kon.readInt();                                                                    
      double ergebnis4 = Math.pow(zahl6[i], xx);
      int ergebnis5 = (int) ergebnis4;
      int mm = ergebnis5 % yy;
      System.out.print("Der entschlüsselte Text lautet:" +mm);
    } else if(aa==2){
      System.out.println("ENDE");
      System.exit(0);
    } // end of if-else
  }
}
 

rme

Top Contributor
double zahl6[]; sollte eigentlich double[] zahl6; sein

Falls das nicht der Fehler war, bitte die genaue Fehlermeldung und Zeile zeigen, so muss man nicht jedesmal den ganzen Code lesen und raten, wo der Fehler ist. Deine Variablenname sind übrigens sehr unleserlich, woher soll man jetzt wissen, dass zahl6 den verschlüsselten Text enthalten wird? ergebnis4, ergebnis5.. sowas gibt normalerweise Punktabzug. Variablen nennt man so: encryptedText, plainText, message, ...
 

Red John

Mitglied
Jetzt kommt folgendes:

Ich vermute das hat mit:
Code:
for (i=0;i<c.length;i++) {                        //Jeder einzelne Teil des Chararrays wird nithilfe der for-Schleife nach und nach durchgearbeitet
      m= c[i];                                        //und das Ergebnis wird am Ende ausgegeben
      ergebnis = Math.pow(m,e);
      //System.out.print(ergebnis);
      //ergebnis1 = (int) ergebnis;
      cryptedtext[i] = ergebnis % n;
      System.out.println(cryptedtext);    
    } // end of for

zu tun.
Die Variable cryptedtext ist wahrscheinlich nicht ganz so richtig deklariert.

Java:
    long m;
    int anzahl = c.length;
    double[] cryptedtext;
    double[] plainText;
    plainText = new double [anzahl];
    cryptedtext = new double [anzahl];
    System.out.println("Bitte geben sie 'e' an!");
    e = Kon.readInt();
    System.out.println("Bitte geben sie 'n' an!");
    n = Kon.readInt();
    double ergebnis;    
    
    for (i=0;i<c.length;i++) {                        //Jeder einzelne Teil des Chararrays wird nithilfe der for-Schleife nach und nach durchgearbeitet
      m= c[i];                                        //und das Ergebnis wird am Ende ausgegeben
      ergebnis = Math.pow(m,e);
      //System.out.print(ergebnis);
      //ergebnis1 = (int) ergebnis;
      cryptedtext[i] = ergebnis % n;
      System.out.println(cryptedtext);    
    } // end of for
 

Red John

Mitglied
So die Verschlüsselung zeigt keine Fehler, aber ich kann jetzt nicht mit Math.pow potenzieren. Er sagt mir, das ich keinen double[] potenzieren könnte. wie löse ich das jetzt?

Java:
for (i=0;i<c.length;i++) {                        //Jeder einzelne Teil des Chararrays wird nithilfe der for-Schleife nach und nach durchgearbeitet
          m= c[i];                                       //und das Ergebnis wird am Ende ausgegeben
          ergebnis = Math.pow(m,e);
          //System.out.print(ergebnis);
          //ergebnis1 = (int) ergebnis;
          cryptedtext[i] = ergebnis % n;
          System.out.println(cryptedtext[i]);
        } // end of for

        System.out.println("Falls du den Text wieder entschlüsseln möchtest, drücke die '1'; Um zu beenden, drücke die '2'");
        char wahl = Kon.readChar();
        if (wahl=='1') {
          System.out.println("Bitte gib den privaten Schlüssel d an!");
          int d1 = Kon.readInt();
          System.out.println("Bitte gib nun den öffentlichen Schlüssel N an!");
          int n1 = Kon.readInt();
          double ergebnis4 = Math.pow(cryptedtext, d1);
          int ergebnis5 = (int) ergebnis4;
          int encryptedtext = ergebnis5 % n1;
       //   String str = "" + i;
       //   System.out.print("Der entschlüsselte Text lautet:" +encryptedtext);
       // } else if(wahl=='2'){
       //   System.out.println("ENDE");
       //   System.exit(0);
       } // end of if-else

Es geht im besonderen um diese Zeile:
Code:
double ergebnis4 = Math.pow(cryptedtext, d1);
 

rme

Top Contributor
Naja, du kannst nicht alle Elemente auf einmal potenzieren, cryptedtext ist ja ein Array. Du musst wieder eine Schleife machen, die jedes Element einzeln entschlüsselt.
 

Red John

Mitglied
Mit der for-Schleife?

Java:
        if (wahl=='1') {
          System.out.println("Bitte gib den privaten Schlüssel d an!");
          int d1 = Kon.readInt();
          System.out.println("Bitte gib nun den öffentlichen Schlüssel N an!");
          int n1 = Kon.readInt();
          ergebnis4 = 1;
          for(i=1;i<=d1;i++){
            ergebnis4= ergebnis4*cryptedtext[i];
            System.out.print(ergebnis4);
          }
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Erste Schritte Variablen in abhängigkeit von Git branch Allgemeine Java-Themen 7
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Fehler bei Variablen Allgemeine Java-Themen 2
N File Path mit Variablen angeben Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
P static Blocks und variablen Allgemeine Java-Themen 41
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
T Maximale Felder maximale Variablen Allgemeine Java-Themen 2
W Lebendige Variablen herauslesen Allgemeine Java-Themen 1
K Summierung einer Variablen Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
K Static Variablen verbieten Allgemeine Java-Themen 10
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
F Variablen Variablen schachteln Allgemeine Java-Themen 6
7 6 int variablen vergleichen Allgemeine Java-Themen 34
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
C Classloading und statische Variablen Allgemeine Java-Themen 2
K Variablen speichern Allgemeine Java-Themen 2
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
J Statische Variablen, Threadübergreifend. Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
V Typargument einer Variablen erfragen Allgemeine Java-Themen 4
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
G Thread variablen Sichtbarkeit Allgemeine Java-Themen 15
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
T JNI -> auf Java-Variablen etc zugreifen Allgemeine Java-Themen 6
M Bezeichnung für Component-Variablen Allgemeine Java-Themen 6
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
A Überschreibung von Variablen Allgemeine Java-Themen 3
A JavaCC: Variablen zaehlen Allgemeine Java-Themen 12
B globale und lokale Variablen Allgemeine Java-Themen 17
G referenz von variablen Allgemeine Java-Themen 9
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
S Variablen und ihre Tücken. Allgemeine Java-Themen 7
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
C dynamische variablen Namen! Allgemeine Java-Themen 4
M Int und String Variablen verändern Allgemeine Java-Themen 10
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
P Objekt- Variablen Allgemeine Java-Themen 16
K Environment Variablen per java -D weitergeben Allgemeine Java-Themen 9
D in class-Dateien nach variablen suchen! Allgemeine Java-Themen 5
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
B Reguläre ausdrücke mit variablen? Allgemeine Java-Themen 12
MQue JButton an verschiedenen Variablen Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
L Sichtbarkeit von Variablen / getMethode Allgemeine Java-Themen 4
H Variablen (A1, A2, A3 mit A_irgendetwas aufrufen) ohne Array Allgemeine Java-Themen 5
M Variablen in einer .doc Vorlage ersetzen Allgemeine Java-Themen 4
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
E Zugriff auf Variablen äusserer Klassen Allgemeine Java-Themen 2
M Variablen in Klasse verpacken? Allgemeine Java-Themen 10
F Allegemeiner Datentyp für Objekte und Primitive Variablen Allgemeine Java-Themen 6
W Array mit Variablen aus Vararg füllen Allgemeine Java-Themen 4
S Problem mit Boolean Variablen Allgemeine Java-Themen 8
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
C klassenübergreifende variablen Allgemeine Java-Themen 3
J 28 Variablen vergleichen und die höchsten addieren Allgemeine Java-Themen 15
T ungewollter Zugriff auf private Variablen? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben