Java -> Name des Arrays ausgeben...

Cybered

Admiral Special
Mitglied seit
22.09.2002
Beiträge
1.625
Renomée
14
Standort
Unimatrix-Zero
Hi,
ich habe mich durchs Netz gewühlt, aber nix gefunden.
Man kann ja mit
Code:
feldname.length
die länge des feldes ermitteln...gibt es jetzt auch ein argument was mir den Feldnamen zurückgibt...so was in der Art
Code:
feldname.name
...soll dann als ergebniss
Code:
feldname
zurückgeben...um es zB. mit einer System.out.print Anweisung auszugeben..*noahnung*
Damit soll praktisch in einem Projekt für die Schule gezeigt werden, das ich mich 2 mal auf das gleiche Feld beziehe...ohne einen einfach Text dahinzuschreiben...der name soll quasi live angezeigt werden...hoffe ihr versteht mich
thx4all
Cybered
 
Ist nicht möglich, Variablennamen existieren nicht bei Runtime. Denke das wird bei Java auch nicht anders sein, auch wenn es JIT compiled wird und nicht vorübersetzt.

Ich denke aber wenn Du sowas willst, stimmt schon mal etwas im Programmdesign nicht.
Wenn Du beweisen willst, dass du am selben String arbeitest, erstelle einfach eine Klasse mit dem String und einer einzigartigen ID (z.B. Zeit) und beweise, dass Du immer wieder das selbe Objekt ansprichst indem Du diese ID ausgibst.
Aber ehrlich gesagt weiß ich nicht, ob es Dein Problem löst, könntest Du es bitte (viel) genauer beschreiben.
 
Also ich schreibe Zufallszahlen in ein Array...der name ist meinetwegen "feldname"...
dann gebe ich das Array "feldname" aus...nun sortiere ich das Array "feldname"...und gebe es erneut aus...ich möchte also einfach zeigen, das die erste Ausgabe aus dem Array"feldname" kommt...und die zweite eben auch, nur eben sortiert.

Cybered
 
Habe mich verlesen, du hast einen Array und kein String, ansonsten stimmt alles.
Wie willst du beweißen, dass es das selbe Array ist, es ist doch aus dem Code eindeutig ersichtlich und ohne den Code kannst du es nicht zeigen.

Nehmen wir an du hast viele solcher Arrays, dann bilde eine Klasse die das Array und eine Identifikation hält z.B einfach Index oder einen String oder was dir sonst einfällt.
Anstatt Arrays zu erstellen, erstellst du einfach Objekte dieser Klasse mit eigener ID.
 
Ist nicht möglich, Variablennamen existieren nicht bei Runtime. Denke das wird bei Java auch nicht anders sein, auch wenn es JIT compiled wird und nicht vorübersetzt.
Das könnte unter Java sehr wohl anders sein. Java bietet wie auch .NET Reflection und bei .NET geht sowas. Die Wahrscheinlichkeit, dass es auch bei Java über Reflection geht, ist IMHO ziemlich hoch.
 
Wusste nicht, dass es mit .Net geht, programmiere aber auch nicht darauf.

Edit: Have etwas über Java Reflektionen gelesen, es stimmt, es ist unter Java möglich, man lernt nie aus.

Aber abgesehen davon ob es möglich ist oder nicht, denke ich dass man helfen sollte andere Lösungen zu finden, denn so eine Lösung ist auf keinen Fall als sauber zu bezeichnen (oder kennt jemand einen Fall, bei dem dies die einzige Lösung ist?) und in diesem Fall sogar aufwendiger (allein die Recherchen:) ).
 
Zuletzt bearbeitet:
Aber ist das nicht ein wenig albern?

1. Wenn man in den Quelltext schaut, sieht man, dass es das selbe Array ist.

2. Wenn man nicht in den Quelltext schauen kann, kann man doch behaupten, man verwendet die reflection api (wenn das überhaupt geht), schreibt da aber statisch was hin.

Zum Theme reflection:
Soweit ich weiß kann man damit nur Klassen und deren Variablen und methoden herausfinden. Wenn man aber eine lokale Variable anlegt (z.B. ein array in der main-Funktion) glaube ich nicht, dass die irgendwie mit reflection zu finden ist.

Und ehe man sich da ne Klasse bastelt, wo man die als Klassenvariable reinbastelt, nur, um sie via Reflection zu finden, und dann ein Mega-Konstrukt baut, um zu beweisen, dass es so heißt, sollte man lieber einfachen, gut nachvollziehbaren Code schreiben.

Denn:
Selbst wenn die Variable so heißt, kann es trotzdem ein anderes Array sein, da ein Array auch nur ein Objekt ist und der Variablenname damit nur ein Pointer.

Code:
int[] a = .....;
int[] b = .....;

a = b;

a heißt immer noch a, ist aber ein anderes Array (das, was mit b angelegt wurde).

Du kannst aber entweder die toString() oder die hashCode() verwenden.

Kurzes Beispiel:
Code:
import java.util.Arrays;

public class ArrayTest {

	public static void main(String[] args) {

		int[] a = new int[] { 3, 2, 1, 4, 1 };
		int[] b = new int[] { 3, 2, 1, 4, 1 };

		System.out.println("Hashcode a:" + a.hashCode());
		System.out.println("Hashcode b:" + b.hashCode());

		System.out.println("toString() a:" + a);
		System.out.println("toString() b:" + b);

		// sollten beide gleich aussehen
		System.out.println("Array a (unsortiert): " + Arrays.toString(a));
		System.out.println("Array b (unsortiert): " + Arrays.toString(b));

		// sortiere Array a
		Arrays.sort(a);

		System.out.println("Hashcode a:" + a.hashCode());
		System.out.println("Hashcode b:" + b.hashCode());

		System.out.println("toString() a:" + a);
		System.out.println("toString() b:" + b);

		// sollten beide gleich aussehen
		System.out.println("Array a (sortiert): " + Arrays.toString(a));
		System.out.println("Array b (unsortiert): " + Arrays.toString(b));
	}

}

Das Programm liefert folgende Ausgabe:

Code:
Hashcode a:17523401
Hashcode b:8567361
toString() a:[I@10b62c9
toString() b:[I@82ba41
Array a (unsortiert): [3, 2, 1, 4, 1]
Array b (unsortiert): [3, 2, 1, 4, 1]
Hashcode a:17523401
Hashcode b:8567361
toString() a:[I@10b62c9
toString() b:[I@82ba41
Array a (sortiert): [1, 1, 2, 3, 4]
Array b (unsortiert): [3, 2, 1, 4, 1]
 
Mach doch einfach eine Klasse, in der das Array und ein String steht. Den String kannst du dann setzen wie du willst, beim Init zB. auf den Namen der Variable, der das neue Objekt zugewiesen wird.
Ob man Arrays bei Java ableiten kann weis ich net, sonst wär das auch noch eine Möglichkeit.
 
Hmm... also ich weiß nicht, wie Arrays in Java implementiert sind. Wenn es sich aber so verhält wie in c++ (Pointer auf den ersten Speicherblock für das Array), dann kannst du das Array identifizieren, indem man eben diesen Pointer ausgibt (geht unter c++ mit ner Typeconversion oder so und sollte mit Java auch machbar sein) und somit "echt" zeigen, dass auf ein und dasselbe Array zugegriffen wird.
 
Java arbeitet zwar mit Pointer, "versteckt" sie jedoch, den meisten Java Programmierern ist nicht einmal bewusst, dass die fast die ganze Zeit mit Pointer umherjonglieren.

Ich denke was i_hasser und ich vorgeschlagen haben (Klasse mit Array und Identifikation) ist wirklich die sauberste und einfachste Variante. Aber diese macht auch ehrlich gesagt genau so wenig Sinn, es gibt keinen Weg zu beweisen, dass es das selbe Array ist ohne in den Code zu zeigen, nicht mit Reflektion, nicht mit dem String noch in C/C++ Manier via Addresse, denn all diese Ausgaben könnten ja im Code von uns "gestellt" worden sein.
 
Eine Möglichkeit sollte es geben. Man implementiert eine Klasse die ein Array nachbildet, von außen (einem anderen Programm/Codestück/wasauchimmer) initialisiert wird, und alleinig zugriff auf einen verschlüsselten Kommunikationskanal zur Außenwelt hat.

Allerdings hat das in der Praxis einen Wert von 0.0 *chatt*.
 
Zurück
Oben Unten