class ich kann keinen objekt machen
-
hi.
copy.class ist ne eigene public class, die funtz auch, aber Rate irgendwie raf ich das nich:package raetsler; import java.io.*; public class raetsler{ class Rate{ BufferedReader eing = new BufferedReader(new InputStreamReader(System.in)); private String result;//resultat private int size;//grösse des wortes private String word; File fileread = new File("words.xan"); File filewrite = new File("results.txt"); public void bruteforce(){//hier soll jede mögliche zeichenfolge entstehen... copy c = new copy(); String tester = c.copy(word); for(int counter = 0; counter <= size;counter +=1){ if(tester.charAt(counter)!='0'){ } } //hier kommt noch mehr zum bsp. alle ergebnisse in eine datei mit komma o. //enter getrennt //schreiben (resluts.txt) } public String read(){ int found=0; copy c = new copy(); //kopie des originals word String alltesters = c.copy(word); /*for(;;){ //hier noch ein system überlegegen wie ich es mache alltesters+=tester+",";////wenn gegangen }*/ if(found==0){ System.out.println("Please wait..."); bruteforce(); return "Schauen Sie in der Datei 'results.txt' nach einem möglichen Treffer."; } return alltesters; } public Rate(int size) { this.size= size; char cput;// int iput;// for(int counter=0, which=1;counter<=size;counter+=1){ System.out.print("Der "+which+". Buchstabe: "); which+=1; //String put //eing.read(iput); iput=eing.read();// //cput=iput; if(iput!='0'){// word.charAt(counter) = cput;//// mal noch wegen cput schauen } } System.out.println(read()); } } public static void main(String args[]){ int size=0; System.out.print("Bitte geben Sie die grösse des Wortes ein: "); BufferedReader forsize = new BufferedReader(new InputStreamReader(System.in)); //forsize.readLine(size); size=forsize.read(); raetsler r = new raetsler(); r.Rate rat= new r.Rate(size); } }
-
Was genau verstehst du an der Klasse "Rate" nicht? Das ist eine gewöhnliche Inner-Class. Also eine Klasse in einer Klasse.
-
ich versteh die class Rate schon, hab sie ja selbst gemacht, aber wieso kann ich mit
raetsler r = new raetsler();
r.Rate rat = new r.Rate(size);kein objekt rat von class Rate machen?? gibt eine fehlermeldung in etwa:
class r.Rate not found.bye donay
-
Weil die Klasse "Rate" nur innerhalb der Klasse "raetsler" sichtbar ist.
-
ja, aber ich hab ja mit raetsler r = new raetsler(); ein objekt das doch Rate sehen sollte.
wie sollte es denn aussehen das es geht???
-
Muss die Klasse "Rate" denn innerhalb von "raetsler" sein? Wenn Nein dann löst sich für dich das Problem durch voranstellen von "public" an die Klassendefinition für "Rate"
-
hi.
ja, Rate soll in raetsler sein.
also etwa so:[java]
public class raetsler{class Rate(){
public Rate(){ //konstruktor
}void func(){ //irgendeine methode die in Rate ist.
}} //Rate schliessen
static public void main(String args[]){
Konstruktor von Rate aufrufen, also objekt von Rate machen;
} //main schliessen}// public raetsler schliessen.
[/code]und das ganze ohne das Rate static ist...
bitte bsp und wenns geht mit erklärung...ahja und sorry wegen der grammatik im titel
bye donay
-
public class Test { private class Rate { private int i; public int getI() { return i; } public void setI(int v) { i = v; } } public static void main(String[] args) { Test t = new Test(); Test.Rate r = t.new Rate(); System.out.println(r.getI()); } }
Das funktioniert bei mir einwandfrei .....
Ich hoffe, es hilft
-
Ja, das funktioniert schon, denn du befindest dich ja in der Klasse Test, sonst gehts aber nicht, also machts auch keinen Sinn.
-
Es gibt eine Regel die man beachten sollte.
Objekte von inneren Klassen ausschließlich in der äußeren Klasse instantiieren, die diese innere Klasse auch beherbergt.
Sobald man eine innere Klasse plötzlich wo anders auch braucht ist das entweder ein Designfehler oder ein Kandidat für eine "öffentliche" (d.h. äußere, eigenständige) Klasse.
@donay: Es ist schon eine Sünde einen Package-Namen so zu nennen wie eine Klasse des Packages. Trägt dem Sinn vom Packaging nicht gerade weiter :-)Deklarier deine Rate Klasse auf der selben Ebene - so müsste es tun.
-
public class Test { public static void main(String[] args) { Test1 t = new Test1(); Test1.Rate r = t.new Rate(); System.out.println(r.getI()); } } public class Test1 { public class Rate { private int i; public int getI() { return i; } public void setI(int v) { i = v; } } }
Es geht be imir genauso ....... nur halt mit ner public inner class.
..... auch wenn's vom design her schwachsinn ist, so funktioniert es trotzdem
-
danke, aber wieso t.new? ich versteh hier den aublauf nicht...
bye donay
-
Die beiden folgenden Links erklären es kurz(Leider in Englisch):
[url] http://c2.com/cgi/wiki?InnerClasses [/url]
[url] http://www.newarchitectmag.com/archives/1997/11/java/ [/url]Innere Klassen besitzen immer implizit eine referenz zur äußeren Klasse. Deshlab müssen sie qualifiziert aufgerufen werden.
-
hi.
ok, hab mich dort ein bisschen umgeshen, leider aber nicht alles verstanden, darum komm ich immer noch nicht nach wieso denn t.new und nicht zum beipiel:
Test t = new Test();
Test.test = new t.test();ich kann mir unter t.new nichts vorstellen irgendwie...
bye donay