hashtables und typ date

Status
Nicht offen für weitere Antworten.

AlBundy

Mitglied
hi,
hab noch nen problem :?
und zwar möchte ich in eine hashtable ein datum schreiben, aber der typ date scheint in einer hashtable nicht erlaubt zu sein.

ausserdem möchte ich jetzt gerne 2 methoden haben die einmal die zeit und einmal die temperatur ausgeben, aber ich habe von den methoden keinen zugriff auf die hashtables, vieleicht kann mir ja nochmal jemand weiterhelfen 😉

die fehler sind in zeile:
37 -> The local variable b may not have been initialized
59 -> bekomme ich halt keinen zugriff auf die hashtables



Code:
public class temp extends Thread implements temperaturint{
	public static void main(String[] args){
		temp t = new temp();
		t.run();
		

	}
	private boolean running = true;
	
	
	public void run() {
		
		Hashtable speicher = new Hashtable();
		Hashtable speicherdate = new Hashtable();
		
		BufferedReader tastatur = new BufferedReader(
                new InputStreamReader(System.in));

		int hv = 0;
		String a = "";
		String weiter = "j";
		Date b;
		
		
		while (weiter.equals("j")){
		Date datum = new Date();
		System.out.println("Bitte Temperatur Wert eingeben: ");
		try {
			a = ("Temperatur: " + tastatur.readLine()+"°");
			b = datum;
		}
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		speicher.put(new Integer(hv),a);
		speicherdate.put(new Integer(hv),b);
		
		System.out.println("Wollen sie einen weiteren Temperaturwert eingeben? (j/n)");
		try {
			weiter = tastatur.readLine();			
		}
		catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		hv= hv+1;
		
		}
		
		hv = 0;
		
		for (Enumeration e = speicher.elements() ; e.hasMoreElements() ;) {
	         System.out.println(e.nextElement());
	     }

	}
	public String getlastTemperatur(){
		
		return ;
	}

	public String getlastTime(){
		return
	}
	
	public void stopThread() {
		this.running = false;
	}
}
 
AlBundy hat gesagt.:
37 -> The local variable b may not have been initialized
Du initialisiertst b im Try-Block, daher ist nicht sichergestellt das es in 37 initialisiert ist. Einfach vorher null setzen:
Code:
Date b = null;

AlBundy hat gesagt.:
59 -> bekomme ich halt keinen zugriff auf die hashtables
mach die Hashtable zur Klassenvariable
 
ok danke schonmal,
aber wie geb ich denn jetzt den letzten wert der hashtable aus?
ich hab grad schonmal versucht mit speicher.size zu arbeiten, klappt aber nicht
 
Du willst immer nur den letzten Wert haben und kennst den Key nicht?
Dann mach nicht die Hashtable zur Klassenvariablen, sondern die beiden letzten Werte.
 
hm, ja ich möchte ich immer nur den letzten wert haben
das versteh ich jetzt nicht, ich weiss ja nicht wie ich an den letzten wert heran komme
 
So:

Code:
public class temp extends Thread implements temperaturint{ 
   public static void main(String[] args){ 
      temp t = new temp(); 
      t.run(); 
       

   } 
   private boolean running = true; 
    private String lastTime;
    private String lastTemperatur;
    
    
   public void run() { 
       
      Hashtable speicher = new Hashtable(); 
      Hashtable speicherdate = new Hashtable(); 
       
      BufferedReader tastatur = new BufferedReader( 
                new InputStreamReader(System.in)); 

      int hv = 0; 
      String a = ""; 
      String weiter = "j"; 
      Date b; 
       
       
      while (weiter.equals("j")){ 
      Date datum = new Date(); 
      System.out.println("Bitte Temperatur Wert eingeben: "); 
      try { 
         a = ("Temperatur: " + tastatur.readLine()+"°"); 
        lastTemperatur = a;
         b = datum; 
        lastTime = b.toString();
      } 
      catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
      } 
      speicher.put(new Integer(hv),a); 
      speicherdate.put(new Integer(hv),b); 
       
      System.out.println("Wollen sie einen weiteren Temperaturwert eingeben? (j/n)"); 
      try { 
         weiter = tastatur.readLine();          
      } 
      catch (IOException e1) { 
         // TODO Auto-generated catch block 
         e1.printStackTrace(); 
      } 

      hv= hv+1; 
       
      } 
       
      hv = 0; 
       
      for (Enumeration e = speicher.elements() ; e.hasMoreElements() ;) { 
            System.out.println(e.nextElement()); 
        } 

   } 
   public String getlastTemperatur(){ 
       
      return lastTemperatur; 
   } 

   public String getlastTime(){ 
      return lastTime;
   } 
    
   public void stopThread() { 
      this.running = false; 
   } 
}
 
die daten in einem hashtable werden ungeordnet abgelet. du kannst also mit größenangaben oder sonstigem NICHT arbeiten. wenn du immer an den letzten wert ran willst, muss du dir zumindest immer den letzten key (am besten als klassenmember, wenn du aus einer anderen methode zugreifen musst) speichern.
falls du das mit den keys nicht brauchst, nimm nen java.util.Vector, bei dem kannst du mit hilfe von zahlen indices auf elemente (also auch auf das zuletzt eingefügte) zugreifen
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben