2014-05-13 13 views
5

Ben bir öğrencinin bir kimlik kaydetmek ben İkincisinde sınıf adını Java 3D dizi atama

  • tasarruf ilk parantez içinde bu

    static String[][][] School= new String[1000][20][5]; 
    
    • gibi görünen bir dizi var değerleri
    • Üçüncü olarak, öğrenci hakkındaki bilgileri (onun adı, soyadı vb.) Kaydediyorum. Tüm sınıf isimlerini atarım, daha sonra her öğrenciye kendi öğrenci kimliğini atarım ve daha sonra onların bilgilerini girebilirim.

    Bunu nasıl yapabilirim? Örneğin,

    School[i] = "A1"; 
    

    ile denedim, ancak çalışmıyor.

    DÜZENLEME: Ya da bu 3 şeyi kurtarmak için başka bir yolu var mı? (sınıf adı, onun öğrencileri ve onun iformation)

  • +0

    Kontrol bu - [Java program iki üç boyutlu (3D) dizi ekleyin.] (http://www.msccomputerscience.com/2013/02/java-program to-eklentisi iki-three.html) – ARJUN

    cevap

    14
    static String[][][] School= new String[1000][20][5]; 
    

    3 Boyut sahiptir rakam düşünün yardımcı olur.

    School[0][0][0]="A1" eklediğinizde, öğeyi 0,0,0 konumunda girdiğiniz anlamına gelir.

    0,0,0'dan itibaren bu konuma 1000,20,5 kadar çıkacaktır.

    Böyle ekleyebilirsin Ama çok fazla öğeniz var.3D dizi öğelerinin ise

    School[0][0][0]="A1" 
    School[0][0][1]="A2" 
    School[0][0][2]="A3" 
    ..... 
    School[0][1][0]="B1" 
    School[0][1][1]="B2" 
    School[0][1][2]="B3" 
    ...... 
    

    3D dizideki öğeleri nasıl ekleneceğini Şimdi
    int[3][4][2] array3D 
    // means Three (4x2) 2 Dimensional Arrays 
    
    int[4][2] 
    //means Four 1 dimensional arrays. 
    

    benziyor?

    Başlat azından doğrudan her pozisyonda ayrıntıları eklemek istediğiniz gibi bu durumda da çok sıkıcı bir iştir

    int[][][] threeDArray = 
        { { {1, 2, 3}, { 4, 5, 6}, { 7, 8, 9} }, 
         { {10, 11, 12}, {13, 14, 15}, {16, 17, 18} }, 
         { {19, 20, 21}, {22, 23, 24}, {25, 26, 27} } }; 
    

    kullanabilirsiniz. 1000 kayıtlarınız var.

    Sizin dizisi bu

    enter image description here

    NOT gibi unsurları olacaktır: amaçla 3D diziyi kullanmak tavsiye edilmez.

    Öneri: almak ve tüm Objects

    0

    Diziniz, yapmak istediğiniz şeyi yapmayacaktır.

    Diziyi, her öğeye bir nokta ile bir 3B dizi gibi düşünün. Tek bir dizin belirtirseniz, aslında bilgisayara "Tamam, dizisinin bu dilimini atamak istiyorum, (örneğin, örneğin, String[][] elementAtI = "A1"; için bir şey yapmaya çalışıyorsun). ? 't öyle mantıklı

    dizideki tek bir öğeye almak için, çok bir noktayı bulmak için her üç koordinat belirtmek zorunda nasıl 3D alanında olduğu gibi, her üç endeks belirtmek zorunda:

    School[3][4][5] = "A1"; 
    

    Bir 3B dizisinden daha iyi bir fikir olabilir, nesnelerdir. Herşeyi bir diziye işler, ancak bu birsahip olarak okunabilir değil Her SchoolClass bir name ve Students bir dizi ve her Student sahiptir 10, bir ID, name vb

    yerine bir 3D dizi kullanmanın önereceğim
    3

    , tüm tutacak bir Student Class oluşturmak zorundadır vardır Bir öğrenci ve sınıf için bir sınıf listesi ve sınıfın adını tutacak SchoolClass A Sınıfı için bilgi ve amacına hizmet etmek için bir Array of SchoolClass sağlayabilirsiniz.

    Bu şekilde daha iyi yönetebilirsiniz.

    Umut bu

    0

    Birinci üzerinden değerleri ayarlamak için bu üç parametreye sahip bir yapıcı üç Strings sahip bir sınıf bildirmek ve alıcı ve ayarlayıcılar koymak, değişken alanlar genellikle küçük harf ile başlamak kongre ile deve metni.

    static String[][][] school= new String[1000][20][5]; 
    

    İkinci olarak, diziler böyle çalışmıyor. Dize [] [] [] {{{entry ...} giriş ...} girişi ...} içerir. Girdiler, aynı dizide {"3A", "1", "PersonName"} ve {"3A", "1", "DifferentPersonName"} alacağınız için uygun olmayan bir yöntem olan yinelemeler içerebilir. Her bir dizi boyutu ek boyutları tutan, diğer adıyla { "3A", { "1", { "PERSONNAME"}, { "DifferentPersonName"}}} gibi dize [koymak gerekir çünkü çok

    School[i] = "A1";

    yazım hatası olduğu ] [] string [i] [] []:

    School[i] = {{"A1","PersonName"}};

    burada bir çözelti HashMaps kullanmak olacaktır inanıyoruz. Tekrarlanan girişler birbirinin üzerine yazacaktır. Bu durumda, kod olacaktır:

    // The actual HashMap! 
    static final HashMap<String, HashMap<String, String>> school 
    =new HashMap<String, HashMap<String, String>>(); 
    
    /** 
    * How to use an entry using the above HashSet: 
    * 
    * @param className The name of the class. 
    * @param id The id. 
    * @param details The details. 
    */ 
    void addEntry(final String className, final String id, final String details){ 
        HashMap<String, String>value=school.get(className); 
        // If the class already exists, use it, otherwise make new HashMap. 
        (value==null ? value = new HashMap<String, String>() : value) 
        // Here is how to put in the value mapping. 
        .put(id, details); 
        // Put it back in. This updates the entry. 
        school.put(value); 
    } 
    
    /** 
    * How to get (iterate through) entries from the above HashSet: 
    * 
    * @return An array of students in format "class id details" 
    */ 
    String[] getStudentsSet(){ 
        // This is an iterator. 
        Iterator<Entry<String, HashMap<String, String>>>iterator= 
         school.entrySet().iterator(); 
        Entry<String, HashMap<String, String>>next; 
        String now; 
        // This is for testing 
        final ArrayList<String>list=new ArrayList<String>(); 
        while(iterator.hasNext()){ 
        // Load new class name 
        now=(next=iterator.next()).getKey(); 
        Iterator<Entry<String, String>>iteratorlv2=next.entrySet().iterator(); 
        while(iterator.hasNext()){ 
         final Entry<String, String>entry=iterator.next(); 
         /* This is the student from class "now", id "entry.getKey()", and details "entry.getValue()" 
         * Change this line to what you want, or what you would like to use entries for. 
         */ 
         final String student=now+" "+entry.getKey()+" "+entry.getValue(); 
         // This is for testing 
         list.add(student); 
        } 
        } 
        // This is what prints to the console so you know this thing works. 
        for(final String o:list) System.out.println(o); 
        return list.toArray(new String[list.size()]); 
    }