Variable auf unendlich setzen

Status
Nicht offen für weitere Antworten.
Hallo zusammen,

in einigen Graphenalgorithmen muss man ja Variablen erstmal auf unendlich setzen. Da das Ganze in der Programmierung nicht möglich ist möchte ich das aber symbolisch implementieren.

Und zwar eine Klasse mit einem boolean der anzeigt ob die Variable unendlich ist oder nicht.
wenn dann ein Objekt dieser Klasse mit einem Wert gefüllt wird wird der boolean auf false gesetzt und der Wertebereich auf Integer.MAX_VALUE (es sollen nur Integer möglich sein).

Ich habe nur ein Problem mit der Typenkonvertierung. Wenn ich ein Array dieser Klasse erzeuge

Code:
 public static void main(String args[]) {
    Infinity[] q = new Infinity[8];

  //....
  }
kann ich nicht ohne weiteres int Werte einlesen da Werte vom Typ Infinity erwartet werden.
Ich habe schon versucht eine Methode setWert zum einlesen von Integern zu schreiben, aber da bekomme ich wieder Probleme mit dem Array.

Im Prinzip möchte ich nur ein Array das bei der Erzeugung alle Wert symbolisch auf unendlich setzt, die dann aber nach und nach mit Integer gefüllt werden.

Hier mal der Teil vom Code ohne Fehler
Code:
public class Infinity {
  boolean infinity;
  
  
  public Infinity() {
    infinity = true;
  }
  
  public boolean getInfinity() {
    return infinity;
  }


}

Wie muss ich dass denn jetzt ergänzen damits funktioniert, ich steh ein wenig auf dem Schlau. Tips?
 

The_S

Top Contributor
in deine Infinity-Klasse noch eine Variable für den Integer wert anlegen? Aber irgendwie scheint es mir so, als ob du nen völlig falschen Ansatz hast ;) .
 

Prusik

Aktives Mitglied
Meinst du eventuell das?

Code:
public class zahl{
    bool isInfinity;
    int zahl;
    public zahl(){
        isInfinity =true;
        zahl = Integer.MAX_VALUE;
    }
    //setter und getter Methoden

     public setZahl(int zahl){
         this.zahl = zahl;
         if(zahl < Integer.MAX_VALUE){
              isInfinity = false;
         }
     }
}

und nun ein Array daraus:


Code:
zahl[] zarray = new zahl[8];
 
Ja, sowas in der Art hab ich auch schon gebastelt. Mein Problem liegt jetzt im Zugriff auf ein Array vom Typ Zahl.

Code:
 public int getZahl(int i) {
      return zahl[i];
    }

     public static void main(String args[]) {
       Zahl[] z = new Zahl[3];
       z[0].setZahl(1);
       z[1].setZahl(2);
       z[2].setZahl(3);

       for(int i = 0;i<z.length;i++) {
         System.out.println(z.getZahl(i));
       }
// Anmerkung: Ich habe hier die Klasse Zahl groß geschrieben um es besser von der 
// Variable zahl unterscheiden zu können.
     }


Der Compiler gibt mir andauernd ne Fehlermeldung wegen dem Typ, dass er ein Array erwartet. Ich habe schon alle möglichen Rückgabetypen bei getZahl() versucht (Zahl, int[]...), auf z direkt kann ich ja auch nicht zugreifen.
 

Joker

Bekanntes Mitglied
pack noch eine Methode isInfinity() dazu, dann sollte das passen.

Solltest du nur den positiven Zahlenraum benötigen kannst du vor die Unendlichekeit auch einfach -1 nehmen.
 
Ich steh immer noch aufm Schlauch und verstehe den Zusammenhang gerade nicht. Ich möchte den Wert also den Integer auslesen, was bringt mir dann ne Methode isInfinity() ?
 

Illuvatar

Top Contributor
Wenn du mit double oder float Zahlen rechnest, kannst du auch Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY (bzw. die entsprechenden Konstanten in Float) verwenden...
 
Ich lese eigentlich Daten aus einem Graphen aus, also Knoten und (gewichtete) Kanten und das sind alle nur Integer.
Und aus dem Array soll mal meine Prioritätswarteschlange werden (einfache Liste geht ja auch). Diese wird im Algorithmus am Anfang auf unendlich gesetzt (Dijkstra Algorithmus).
 
G

Guest

Gast
Code:
public static void main(String args[]) { 
   Zahl[] z = new Zahl[3]; 
   // Hier ist dein Fehler. Zu diesem Zeitpunkt ist das Array komplett leer. Alle Elemente sind null.
   z[0].setZahl(1); 
   z[1].setZahl(2); 
   z[2].setZahl(3); 

   for(int i = 0;i<z.length;i++) { 
      System.out.println(z.getZahl(i));  // z ist ein Array, daher z[i].getWasAuchImmer()
   } 
   // Anmerkung: Ich habe hier die Klasse Zahl groß geschrieben um es besser von der 
   // Variable zahl unterscheiden zu können. 
}
Korrekte Version
Code:
public final class Zahl {
   private int value = Integer.MAX_VALUE;

   public Zahl() {
   }

   public Zahl(int value) {
      this.value = value;
   }

   public int getValue() {
      return value;
   }

   public void setValue(int value) {
      this.value = value;
   }

   public boolean isInfinity() {
      return value == Integer.MAX_VALUE;
   }

   public void setInfinity() {
      value = Integer.MAX_VALUE;
   }

   public String toString() {
      if(isInfinity()) {
         return "Infinity";
      }
      return Integer.toString(value);
   }

   public int hashCode() {
      return value;
   }

   public boolean equals(Object obj) {
      if( obj == null || !(obj instanceof Zahl)) {
         return false;
      }
      Zahl z = (Zahl)obj;
      return z.value == value;
   }
}

public static void main(String args[]) { 
   Zahl[] z = new Zahl[3]; 
   z[0] = new Zahl(1); 
   z[1] = new Zahl(2); 
   z[2] = new Zahl();  // Infinity

   for(int i = 0;i<z.length;i++) { 
      System.out.println(z[i]); 
   } 
}
 
G

Guest

Gast
koerschgen2001 hat gesagt.:
Ich lese eigentlich Daten aus einem Graphen aus, also Knoten und (gewichtete) Kanten und das sind alle nur Integer.
Und aus dem Array soll mal meine Prioritätswarteschlange werden (einfache Liste geht ja auch). Diese wird im Algorithmus am Anfang auf unendlich gesetzt (Dijkstra Algorithmus).
Für diesen Fall kannst du int-Array nehmen und es mit -1 initialisieren.
Das setzt aber voraus, dass du keine negativen Werte zu berücksichtigen brauchst.

Code:
int []zahlen = new int[1000000]; // Ein Haufen Zahlen
java.util.Arrays.fill(zahlen, -1); // komplettes Array mit -1 füllen
 

SebiB90

Top Contributor
also programmtechnisch ist unendlich möglich. der IEE754 Standard hat dafür eine BIT Folge vorgesehen.
Code:
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
 

SebiB90

Top Contributor
joar weil Integer nicht im IEE754 abgespeichert werden ;)
wieso kannst du denn kein Double verwenden? damit kannste auch ganzzahlige zahlen darstellen.
 
Hab ich auch schonmal überlegt. Aber das ist eine Seminararbeit und dann kommt bestimmt vom Dozent die Frage warum ich Double benutze weil ich in meinem Algorithmus nur mit Integern arbeite. Deshalb wollte ich ja diese Elegante Lösung über die boolean infinity variable benutzen, ums theoretsich zu implementieren aber keine ressourcen zu verschwenden.
 

The_S

Top Contributor
Ein float hat genauso viele Bits wie ein Integer (32). Und eine zusätzliche Variable halte ich nicht für ellegant ;) .
 
G

Guest

Gast
Zwei Konstanten und das Problem ist weg.
Code:
public static final int POSITIVE_INFINITY = Integer.MAX_VALUE;
public static final int NEGATIVE_INFINITY = Integer.MIN_VALUE;
Warum machst du dich mit solche Sachen verrückt? Für den Algorithmus brauchst du nur alles, was kleiner als 0 ist, als undefiniert/unendlich zu betrachten.
 

SebiB90

Top Contributor
wie schon hobbit gesagt hat
wenn du keine fragen wegen speicherverschwendung haben willst. benutz float. hat halb so viele bits wie double und hat die beiden konstanten auch.
 
G

Gast

Gast
wenn dein algorithmus aber auf ganzzahlen basiert würde ich mich schon fragen warum du nun float und nicht int nimmst
 
Na toll, der eine sagt hot der andere hü.
Das macht mir jetzt meine ganze Planung kaputt :bae:

Wie wärs mit der Antwort, es soll Allgmeingültig sein?
 
G

Guest

Gast
Infinity hin oder her, es ist eine Frage der Präsentation. Für den Algorithmus kannst du ruhig Integer.MAX_VALUE
für unendlich verwenden. Ist dir der Zahlenbereich zu klein, nimm Long mit Long.MAX_VALUE oder von mir aus
auch BigInteger.
 
Dann mach ich alles.
Ich nehem Integer.MAX_VALUE verweise aber auf float bzw. Double.POSITIVE_INFINITY
(vielleicht schalge ich auch noch die infinity lösung vor), so hab ich alles Beleuchtet und jeder ist zufrieden :D
 

The_S

Top Contributor
aber alles doppelt und dreifach? Oder hat das Programm wirklich nur den Sinn irgendwelche Prüfer zu beeindrucken?
 

tincup

Bekanntes Mitglied
koerschgen2001 hat gesagt.:
Dann mach ich alles.
Ich nehem Integer.MAX_VALUE verweise aber auf float bzw. Double.POSITIVE_INFINITY
(vielleicht schalge ich auch noch die infinity lösung vor), so hab ich alles Beleuchtet und jeder ist zufrieden :D

Also wie Hobbit schon sagte, das ist dann eher weniger sinnvoll (und auch nicht perfektionistisch sondern eher unentschieden :D ).

Kann aber deinen Gedankengang absolut nachvollziehen, habe mich an solchen Dingern auch immer zerrissen. Mach bei sowas einfach so, dass es funktioniert. Und wenn du gefragt bist sag, dass das Integer Maxvalue als unendlich interpretiert wird. Und falls du dann noch aussagen kannst, dass das in Ordnung ist, weil die konkreten Werte im Algorithmus eh nie so hohe Werte erreichen, zeigt das ja nur, dass du die Methode verstanden hast.
 
Vielleicht hab ich mich auch falsch ausgedrückt.

Ich meinte dass ich nur eine Methode implementiere, aber in der Hausarbeit auch auf andere mögliche Varianten verweise, je nach Verwendungszweck halt.

In meinem Beispiel reicht halt Integer.MAX_VALUE weil ich nur int Werte benutze.
Wenn man aber float oder double braucht bietet sich halt die Konstante INFINITY an und die eigene Klasse ist halt nur ne theoretische Lösung (wenn mans theoretisch perfekt haben möchte) aber für den praktischen Einsatz weniger geeignet.
 

tincup

Bekanntes Mitglied
koerschgen2001 hat gesagt.:
Ich meinte dass ich nur eine Methode implementiere, aber in der Hausarbeit auch auf andere mögliche Varianten verweise, je nach Verwendungszweck halt.
Achso, ja wenn ihr in der Hausarbeit bis auf das Detail runtergeht ist es sicherlich ein gutes Zeichen, verschiedene Implementationsvarianten aufzuzeigen.

koerschgen2001 hat gesagt.:
Wenn man aber float oder double braucht bietet sich halt die Konstante INFINITY an und die eigene Klasse ist halt nur ne theoretische Lösung (wenn mans theoretisch perfekt haben möchte) aber für den praktischen Einsatz weniger geeignet.

Ich persönlich würde behaupten, dass keine Lösung "perfekter" sein kann, als die Infinity-Konstanten der beiden Gleitkommeklassen. Denn diese sind nicht nur größer (bzw. kleiner) als alle anderen Zahlen sondern verhalten sich auch noch rechnerisch halbswegs vernünftig (insofern man das bei unendlichen Werten sagen kann). Wenn du z.B. durch infinity teilst, erhältst du 0, mit Integer.MAX_VALUE klappt das nicht.

Aber das ist ja auch nicht relevant bei dieser Aufgabenstellung hier, war nur grad mal mein eigener Senf :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
E Variable von 1. Fenster an 2. Fenster übergeben. Java Basics - Anfänger-Themen 7
T Variable in Schleife deklarieren, Speicherplatz, Garbage Collector Java Basics - Anfänger-Themen 10
T Datum als Variable wert Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
U Wie mache ich die Variable xyz eindeutig/unique? Java Basics - Anfänger-Themen 20
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Variable Felderanzahl Java Java Basics - Anfänger-Themen 10
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
W Schleife und einmal variable++ zu viel Java Basics - Anfänger-Themen 20
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
G variable kopieren bzw. woanders benutzen Java Basics - Anfänger-Themen 6
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
J Double Variable und Addition Java Basics - Anfänger-Themen 2
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
KogoroMori21 Variable im Parameter und Ohne Java Basics - Anfänger-Themen 5
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
H Datentypen Wertebereich von <Klassenname> <Variable> Java Basics - Anfänger-Themen 12
M Private Variable Java Basics - Anfänger-Themen 2
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
T Variable in for Schleife ansprechen ohne Array ? Java Basics - Anfänger-Themen 25
s.marcii Modulo in der Variable einsetzen - ist das möglich? Java Basics - Anfänger-Themen 2
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
B Inkrement von Variable Java Basics - Anfänger-Themen 8
V Variablen statische Variable einer Objektvariable zuordnen Java Basics - Anfänger-Themen 3
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
J JTextField Bezeichnung als Variable Java Basics - Anfänger-Themen 3
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
H Variable um 1 erhört ausgeben Java Basics - Anfänger-Themen 4
V Erste Schritte Eine Array-Variable mit Benutzereingaben befüllen Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
L cannot find symbol variable Kon Java Basics - Anfänger-Themen 8
C Statischer Typ aber Variable nicht statisch? Java Basics - Anfänger-Themen 5
H Variable.methode aufstellen, verstehen Java Basics - Anfänger-Themen 2
R Warnung, wenn eine Variable eingegeben wird Java Basics - Anfänger-Themen 6
S Variable einscannen Java Basics - Anfänger-Themen 30
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
J Input-Variable nicht sichtbar Java Basics - Anfänger-Themen 2
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
E Variable (Vektor) in andere Methode übergeben Java Basics - Anfänger-Themen 4
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
S Variable Parameter Java Basics - Anfänger-Themen 5
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
P if - Statement erkennt variable nicht. Java Basics - Anfänger-Themen 12
J Ungewollte Wertveränderung einer Variable Java Basics - Anfänger-Themen 9
R Variablen Variable an FXML-Controller übergeben Java Basics - Anfänger-Themen 4
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
R variable istpositiv might not have been initialized Java Basics - Anfänger-Themen 2
A Methodenname aus variable Java Basics - Anfänger-Themen 2
L Variable aus einer Klasse in einer anderen Klasse nutzen Java Basics - Anfänger-Themen 6
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
Hanschyo Variable nicht initialisiert Java Basics - Anfänger-Themen 6
deatzi Variable aus If Abfrage später nutzen Java Basics - Anfänger-Themen 4
L Variable in If-Statement initialisieren Java Basics - Anfänger-Themen 4
C return kann nicht auf variable zugreifen Java Basics - Anfänger-Themen 26
S Wie erstelle ich eine Vorbedingung für eine Variable einer Methode ? Java Basics - Anfänger-Themen 5
S Warum kann ich nicht mehr als eine Variable in einer for Schleife deklarieren ? Java Basics - Anfänger-Themen 1
V Warum speichert meine String-Variable nummerische Werte? Java Basics - Anfänger-Themen 3
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
A Erste Schritte Mein Programm erkennt die variable EinAus.readInt nicht Java Basics - Anfänger-Themen 15
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
D Aufruf einer statischen Variable Java Basics - Anfänger-Themen 1
F [OOP] Auf eine Variable aus meherer Klassen zugreifen Java Basics - Anfänger-Themen 22
D Einer Variable automatisch Zahlen hinzuaadieren Java Basics - Anfänger-Themen 3
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
BadBat Variablen Eine Variable mit 2 Typen Java Basics - Anfänger-Themen 38
S Cannot find symbol (symbol ist eine Variable) Java Basics - Anfänger-Themen 13
K String einlesen und als Variable speichern Java Basics - Anfänger-Themen 8
M Variable noch erstellen oder lieber so? Java Basics - Anfänger-Themen 1
G Variable Objektnamen Java Basics - Anfänger-Themen 43
B Variable in mehreren Klassen nutzen Java Basics - Anfänger-Themen 4
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben