Avatar billede jespersahner Nybegynder
06. maj 2003 - 12:25 Der er 19 kommentarer og
1 løsning

Et par hurtige..

Et par hurtige Java-spm. fra en novice:
- hvordan omsætter man fra numerisk til karakter og omvendt?
- Hvordan lagrer man mest effektivt numeriske variable i en array-lignende struktur med samme funktionalitet som Vector-klassen (dvs. dynamisk udvidelse mulig). Så vidt jeg kan se, kan man ikke direkte lagre variabler af simpel type i et Vector-objekt
Avatar billede soreno Praktikant
06. maj 2003 - 12:30 #1
1:
int tal = 12345;
String str = "" + tal;
int tal2;
try
{
tal2 = Integer.parseInt(str);
}
catch(NumberFormatException e)
{
  e.printStackTrace();
}

2:
lav et Integer objekt.
vect.add(new Integer(12345));
Avatar billede tosssen Nybegynder
06. maj 2003 - 12:32 #2
Du kan godt gemme de basale typer i en Vector vha. de klasser der hører til de basale typer.

int i=5;
Vector v = new Vector();
v.addElement(new Integer(i));
int j=((Integer)v.elementAt(0)).intValue();
System.out.println(j);
Avatar billede tosssen Nybegynder
06. maj 2003 - 12:35 #3
Hvis du vil lagre en double så bruges klassen Double osv.
Avatar billede arne_v Ekspert
06. maj 2003 - 13:00 #4
Overvej at lave en type-safe wrapper a la:

public class MyArrayList ArrayList {
  private ArrayList list;
  public MyArrayList() {
      list = new ArrayList();
  }
  public put(String key, int v) {
      list.put(key, new Integer(v));
  }
  public getInt(String key) {
      return ((Integer)list.get(key)).intValue();
  }
}

Der er ikke alle som kan lide den slags klasser, men de er meget udbredte.
Avatar billede soreno Praktikant
06. maj 2003 - 13:03 #5
Der mangler vist noger:
public class MyArrayList ArrayList

skal vel være:
public class MyArrayList extends ArrayList
Avatar billede arne_v Ekspert
06. maj 2003 - 13:04 #6
Ups.

Vrøvl.

Det skal naturligvis være enten:

public class MyHashMap {
  private HashMap map;
  public MyHashMap() {
      map = new HashMap();
  }
  public put(String key, int v) {
      map.put(key, new Integer(v));
  }
  public getInt(String key) {
      return ((Integer)map.get(key)).intValue();
  }
}

eller:

public class MyArrayList {
  private ArrayList list;
  public MyArrayList() {
      list = new ArrayList();
  }
  public put(int v) {
      list.put(new Integer(v));
  }
  public getInt(int ix) {
      return ((Integer)list.get(ix)).intValue();
  }
}

Jeg - fik rodet nogle forskellige ting sammen.
Avatar billede arne_v Ekspert
06. maj 2003 - 13:05 #7
Og så lige den sidste rettelse:

list.add(new Integer(v)); // add ikke put
Avatar billede arne_v Ekspert
06. maj 2003 - 13:05 #8
Jeg håber folk forstår hvad jeg forsøger at forklare.
Avatar billede websmith Nybegynder
06. maj 2003 - 14:07 #9
Og så skal der vel også return types på dine metoder getInt ??
Avatar billede arne_v Ekspert
07. maj 2003 - 13:52 #10
selvfølgelig.
Avatar billede magoo20000 Nybegynder
07. maj 2003 - 15:15 #11
og void på de andre.
Avatar billede arne_v Ekspert
07. maj 2003 - 15:33 #12
jeps
Avatar billede arne_v Ekspert
07. maj 2003 - 15:34 #13
Jeg fik vist tastet lige hurtigt nok.
Avatar billede arne_v Ekspert
07. maj 2003 - 18:57 #14
For en god ordens skyld:

MyArrayList.java
----------------

import java.util.ArrayList;

public class MyArrayList {
    private ArrayList list;
    public MyArrayList() {
        list = new ArrayList();
    }
    public void add(int v) {
        list.add(new Integer(v));
    }
    public void add(double v) {
        list.add(new Double(v));
    }
    public void add(boolean v) {
        list.add(new Boolean(v));
    }
    public void add(String v) {
        list.add(v);
    }
    public int getInt(int ix) {
        return ((Integer) list.get(ix)).intValue();
    }
    public double getDouble(int ix) {
        return ((Double) list.get(ix)).doubleValue();
    }
    public boolean getBoolean(int ix) {
        return ((Boolean) list.get(ix)).booleanValue();
    }
    public String getString(int ix) {
        return ((String) list.get(ix));
    }
    public int size() {
        return list.size();
    }
}

MyHashMap.java
--------------

import java.util.HashMap;

public class MyHashMap {
    private HashMap map;
    public MyHashMap() {
        map = new HashMap();
    }
    public void put(String key, int v) {
        map.put(key, new Integer(v));
    }
    public void put(String key, double v) {
        map.put(key, new Double(v));
    }
    public void put(String key, boolean v) {
        map.put(key, new Boolean(v));
    }
    public void put(String key, String v) {
        map.put(key, v);
    }
    public int getInt(String key) {
        return ((Integer) map.get(key)).intValue();
    }
    public double getDouble(String key) {
        return ((Double) map.get(key)).doubleValue();
    }
    public boolean getBoolean(String key) {
        return ((Boolean) map.get(key)).booleanValue();
    }
    public String getString(String key) {
        return ((String) map.get(key));
    }
}

MyTest.java
-----------

public class MyTest {
    public static void main(String[] args) {
        MyArrayList al = new MyArrayList();
        al.add(123);
        al.add(123.456);
        al.add(true);
        al.add("abc");
        System.out.println(al.getInt(0));
        System.out.println(al.getDouble(1));
        System.out.println(al.getBoolean(2));
        System.out.println(al.getString(3));
        MyHashMap hm = new MyHashMap();
        hm.put("k1", 123);
        hm.put("k2", 123.456);
        hm.put("k3", true);
        hm.put("k4", "abc");
        System.out.println(hm.getInt("k1"));
        System.out.println(hm.getDouble("k2"));
        System.out.println(hm.getBoolean("k3"));
        System.out.println(hm.getString("k4"));
    }
}

og nu er det testet !

:-)

Som sagt så kan den slags wrappere hjælpe meget til at gøre noget
kode let-læselig, fordi man skjuler alle de obskure konverteringer
mellem objekter og simple data typer.
Avatar billede soreno Praktikant
07. maj 2003 - 19:01 #15
Var det ikke noget med at SDK1.5 skulle indeholde templates ?

Det vil gøre tingene lidt nemmere (hvis man har samme datatype i datastrukturen..).
Avatar billede arne_v Ekspert
07. maj 2003 - 19:10 #16
J2SE 1.5 vil efter sigende indeholde:
  enumerations
  autoboxing
  static import
  generics (templates)

Jeg tror faktisk at det mere er autoboxing end generics der vil løse dette
problem.
Avatar billede jespersahner Nybegynder
08. maj 2003 - 17:57 #17
Fornem service som altid :-)
Avatar billede arne_v Ekspert
10. maj 2003 - 08:36 #18
Med hensyn til 1.5, så er der en fremragende artikel på:
  http://java.sun.com/features/2003/05/bloch_qa.html
Avatar billede soreno Praktikant
10. maj 2003 - 09:50 #19
Det lyder da som noget spændende er i vente.
Men lidt en sjov ide med det nye "for" loop.
Avatar billede arne_v Ekspert
10. maj 2003 - 09:55 #20
Der er faktisk en del "very high level" sprog der har tilsvarende
konstruktioner.

Ofte kendt som "for each".

Der er også visse "ikke helt så high level sprog" der har den
som f.eks. DOS/WINDOWS FOR løkke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester