Gehts schneller?

Status
Nicht offen für weitere Antworten.
S

StarSeven

Bekanntes Mitglied
Hallo, ich habe mal ein Programm geschrieben in welchen 2 TextFelder sind, wird in den oberen etwas eingegeben erscheint der selbe Text unten nur umgedreht (ok, ok über den Sinn eines solchen Programms lässt sich streiten :D ), ich habe das alles auch schön hinbekommen, stehe nun aber vor der Frage habe ich auch die schnellste Variante ausgewählt?
Denn wenn man nur aus spass mal eine Taste gedrückt hält kommt kurz (nichtmal eine Sekunde aber mn bemerkt es) nichts dazu und dann aufeinmal ein wenig mehr, ansich ist das ja nicht schlimm, wollte nur mal wissen wie man es vielleicht schneller machen kann.
Hier mein Code von dem was passiert wenn der CaretListener zuschlägt:
Code:
public void caretUpdate(CaretEvent e) {
		String eingabe = "", ausgabe = "", buchstabe;
		int laenge1, laenge2, i;
		eingabe = jtf_Eingabe.getText();
		laenge1 = eingabe.length();
		laenge2 = eingabe.length();
		
		for(i = 0; i < laenge1; ++i)
		{
		buchstabe = eingabe.substring(laenge2 -1, laenge2);
		ausgabe = ausgabe + buchstabe;
		jtf_Ausgabe.setText(ausgabe);
		laenge2 = laenge2 - 1;
		} 
		if (eingabe.equals(""))
		{
			jtf_Ausgabe.setText("");
		}		
	}
 
M

mariopetr

Bekanntes Mitglied
ja, es geht schneller (String to bytearray-> array umdrehen -> new String(byte[]))
 
N

Nobody

Top Contributor
du benötigst kein i und die länge nur 1 mal:


Code:
public void caretUpdate(CaretEvent e) { 
      String eingabe, buchstabe; 
      StringBuffer ausgabe
      int laenge;
      eingabe = jtf_Eingabe.getText(); 
      laenge = eingabe.length()-1; 
             
      for(; laenge > 0; leange--) 
      { 
      buchstabe = eingabe.substring(laenge -1, laenge); 
      ausgabe.append(buchstabe); 
      } 
       jtf_Ausgabe.setText(ausgabe.toString()); 
   }

die abfrage ist sinnlos, da wenn keine eingabe erfolgte, dann ist der string auch leer. ich denke, dass es mit einem string buffer schneller geht.

hab das jetzt aus dem kopf geschrieben und hoffe, dass keine fehler drin sind
 
M

mariopetr

Bekanntes Mitglied
also stringbuffer ist am schnelsten, siehe dazu

Code:
public class T06
{
	String reverse1(String input)
	{
		byte[] ba=input.getBytes();
		byte tmp;
		int length=ba.length-1;
		for (int i= 0; i < ba.length/2; i++)
		{
			tmp=ba[i];
			ba[i]=ba[length-i];
			ba[length-i]=tmp;
		}
		input=new String(ba);
		return input;
	}
	
	String reverse2(String input)
	{ 
	    StringBuffer ausgabe=new StringBuffer();   
               
		for(int i=input.length()-1; i>=0; i--) 
		{ 
			ausgabe.append(input.charAt(i)); 
		} 
		return ausgabe.toString(); 
	}
	
	public static void main(String[] args)
	{
		T06 t=new T06();
		String test="";
		for (int i=0; i<(1024*10); i++)
		{
			test+=(""+i).charAt(0);
		}
		//preload
		String res=t.reverse1(test);
		res=t.reverse2(test);
		//real test
		
		System.out.println("start test with length "+test.length());
		long time;
		time=System.currentTimeMillis();
		res=t.reverse2(test);
		time=System.currentTimeMillis()-time;
		System.out.println("reverse2 tooks "+time);
		time=System.currentTimeMillis();
		res=t.reverse1(test);
		time=System.currentTimeMillis()-time;
		System.out.println("reverse1 tooks "+time);
	}
}
 
S

StarSeven

Bekanntes Mitglied
Nobody hat gesagt.:
die abfrage ist sinnlos
Ich schätze du meintest die if-Abbfrage, hatte ich zuerst auch nicht, doch dann habe ich bemerkt das wenn man etwas eingibt und jeden Buchstaben hintereinander dann wieder wegnimmt der letzte noch im unteren TextField bestehen bleibt.
Die if-Abfrage sorgt dafür das wenn oben das TextFeld leer ist aber unten noch ein Buchstabe steht auch dieser verschwindet.

Edit: Ganz vergessen :oops: Danke für die Antworten ^^.
 
N

Nobody

Top Contributor
so wie ich es geschrieben habe nicht. ich bin mir bei der schleife mir nich ganz sicher ob das 0 richtig ist, da ich die länge bereits reduziert habe. einfach mal testen
 
S

StarSeven

Bekanntes Mitglied
So ich habe jetzt mal deinen Code ausprobiert, oder auch nicht sondern habs versuch, ich hatte deinen Code bei mir reinkoppiert, dann ein vergessenes Simikolon ergänzt und das a und e bei der einen laenge vertauscht (war falsch rum) ^^, dann stieß i8ch als ich dachte der Code ist soweit ok jedoch auf ein Problen.

Code:
public void caretUpdate(CaretEvent e) { 
      String eingabe, buchstabe; 
      StringBuffer ausgabe;
      int laenge; 
      eingabe = jtf_Eingabe.getText(); 
      laenge = eingabe.length()-1; 
              
      for(; laenge > 0; laenge--) 
      { 
      buchstabe = eingabe.substring(laenge -1, laenge); 
      [u][i]ausgabe[/i][/u].append(buchstabe); /* hier mag er die Ausgabe nicht und zeigt einen Fehler an*/
      } 
       jtf_Ausgabe.setText([i][u]ausgabe[/u][/i].toString()); /* und hier mag er die ausgabe ebensowenig*/
   }

Da steht dann "The local variable ausgabe may not have been initialized".
Ich habe keine Ahnung was da falsch ist da ich auch noch nie was mit einen "StringBuffer" gemacht hatte oder vorher davon hörte.
 
N

Nobody

Top Contributor
so ich hab meinen fehler gefunden

Code:
String eingabe, buchstabe;
          StringBuffer ausgabe = new StringBuffer();
          int laenge;
          eingabe = jTextField1.getText();
          laenge = eingabe.length();

          for(; laenge > 0; laenge--)
          {
          buchstabe = eingabe.substring(laenge -1, laenge);
          ausgabe.append(buchstabe);
          }
           jLabel1.setText(ausgabe.toString());


so gehts auf jedenfall wobei du die namen halt wieder anpassen musst
 
D

DTR

Bekanntes Mitglied
StarSeven hat gesagt.:
Da steht dann "The local variable ausgabe may not have been initialized".

Das gibt der Compiler immer dann aus, wenn es probleme geben könnte, weil du eine Variabel nicht mit einem wert belegt hast. Du hast zum beispiel eine if-elseif Konstruktion. Du weist genau, daß wegen der Geschäftslogik nur einer der beiden Fälle eintreten kann. In beiden Zweigen belegst du eine Variable, die vorher unbelegt war und die du anschließend abfragst. Der Compiler hat jetzt das Problem, das führ ihn (er hat ja keine Ahnung von deiner Geschäftslogik) noch ein dritter Fall eintreten könnte, und keiner der beiden Zweige durchlaufen wird. Anschließend ist die Variable nicht belegt, wird aber trotzdem abgefragt, an dieser Stelle kann es zu Problemen kommen. Deshalb kommt diese Meldung.
 
S

StarSeven

Bekanntes Mitglied
Danke funktioniert nun :) , aber ganz ehrlich gesagt viel schneller isses auch nicht
 
N

Nobody

Top Contributor
"viel" schneller ist relativ: in der elektronik sind 5ms ne lange zeit da kämpft man teilweise um ns.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thallius Delegation in Java. Wie gehts? Allgemeine Java-Themen 1
P Input/Output Datei einlesen per Scanner(f) - mit Cron gehts nicht Allgemeine Java-Themen 1
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
G In Eclipse läufts, aber bei java Start.class gehts nicht Allgemeine Java-Themen 8
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
M ArrayIndexOutOfBounds! Wie gehts anders? Allgemeine Java-Themen 10
P Wie gehts weiter? Allgemeine Java-Themen 10
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
M Dateien schneller kopieren Allgemeine Java-Themen 1
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
G Erste Schritte Aufgabe - Geht das auch schneller ? Allgemeine Java-Themen 7
X Images painten - Was ist schneller? Allgemeine Java-Themen 2
L Assoziatives Datenfeld, schneller wie Hashmap Allgemeine Java-Themen 35
B Input/Output Schneller Sort mit wenigen Zugriffen (oder was anderes?) Allgemeine Java-Themen 3
V Thread schneller stoppen Allgemeine Java-Themen 2
D NetBeans Programm in NetBeans deutlich schneller als als Jar Allgemeine Java-Themen 33
F ArrayList schneller als LinkedHashMap? Allgemeine Java-Themen 8
feuervogel Performanzprobleme - Code schneller machen Allgemeine Java-Themen 18
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
R Was ist schneller? Allgemeine Java-Themen 3
E Schneller Einstieg in Java und Web Services Allgemeine Java-Themen 3
C Wer kanns schneller? Allgemeine Java-Themen 13
M Was ist schneller und effizienter GZIP(java) oder 7zip ? Allgemeine Java-Themen 5
D Was ist schneller? Zuweisung oder Vergleich? Allgemeine Java-Themen 18
D Geht es auch schneller doppelte Einträge zu löschen? Allgemeine Java-Themen 23
B Vermeiden das JButton schneller hintereinander drücken Allgemeine Java-Themen 3
m@nu Thumbnails schneller erstellen Allgemeine Java-Themen 2
T Warum mein such-tool schneller als Windows such-tool? Allgemeine Java-Themen 5
A Wie mach ich, das mein Button schneller reagiert. Allgemeine Java-Themen 13
D binär einlesen schneller? Allgemeine Java-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben