2016-03-28 16 views
2

Sınırları bir sayı girilirse, programımı boş bir kümeye döndürmek için nasıl alabilirim? Alttaki sınıf sadece bir test edicidir, bu yüzden birisi Jezebel'i 7. sıraya çevirecek olsaydı, nasıl kilitlenmesini engellerdim? Sadece altı tane satır var.Sınırların dışına çıktığında boş dizge döndürün

import java.util.Arrays; 

public class Classroom { 

private String[][] desks; 
private String[] students = {"Todd", "Harry", "James", "Bob", "Michael", 
    "Fred", "Andy", "Jessica", "Kara", "Ed", "Jane", "", "Dennis", "Dwight", 
    "Sandy", "", "Toby", "", "Sara", "", "Randy", "", "", "", "", "John", "", 
    "", "", "Lindsay", "", "", "", "", "", "Marie", "", "", "", "", 
    "David", "", "",}; 

// the number of row is desks.length 
// the number of column is desks[0].length 
public Classroom(int row, int column) { 
    int i = 0; 
    desks = new String[row][column]; 

    for (int r = 0; r < row; r++) { 
     for (int c = 0; c < column; c++) { 
      desks[r][c] = students[i++]; 
      //Arrays.fill(desks[r][c], students[i++]); 
     } 
    } 
} 

public void setDesks(String[][] desks) { 
    this.desks = desks; 
} 

public boolean isDeskTaken(int row, int column) { 
    boolean taken = false; 
    if (desks[row][column] == "") { 
     taken = true; 
    } 
    if (desks[row][column].isEmpty()) { 
     taken = false; 
    } 
    return taken; 
} 

public String getRow(int row) { 
    String name = Arrays.toString(desks[row]); 
    return name; 
} 

public String getStudent(int row, int column) { 
    return desks[row][column]; 
} 

public boolean placeStudent(int row, int column, String name) { 
    boolean placed = false; 

    // call isDeskTaken(row, column) if not 
    if (desks[row][column].isEmpty()) { 
     desks[row][column] = name; 
     return true; 
    } 
    return placed; 
} // places student if the seat is empty 

public static void main(String[] args) { 
    Classroom classroom = new Classroom(6, 5); 

    System.out.println("getRow(2)" + classroom.getRow(2)); 
    System.out.println("placeStudent(7,1) " + classroom.placeStudent(7, 1, "Jezebel")); 
    System.out.println("placeStudent(4,0) " + classroom.placeStudent(4, 0, "John")); 
    System.out.println("Student " + classroom.getStudent(4, 1) + " has been placed in the 4th row and 1st column"); 
} 

} böyle, deneyin ve dizin önce

+0

Dizinin sınırların dışında olup olmadığını kontrol edin (ör., (satır < 0 || row > = desks.length) ') ve" return "" eğer öyleyse. –

+2

Sizin metodunuz "isDeskTaken" anlamsızdır. '' ”.isEmpty()' 'true' dir. –

+0

'isDeskTaken' ==>' geri dönüşler [satır] [sütun] .isEmpty(); ' –

cevap

0

Bir dizinin uzunluğunu kontrol edebilirsiniz:

String[] myArray = new String[5]; // an array with indexes [0] to [4] 

// ... 

// at some point we might try to access the element at index [5] 
// remembering that we only have indexes [0] -> [4] in a 5 element array 
// so we first check that the array is of sufficient length 

if(myArray.length >= 6) { 
    return myArray[5]; // 6th element 
} else { 
    return ""; 
} 

Sadece tekrar vurgulamak için, dizinin uzunluğu 5 öğeler, ancak bu öğelerin dizinleri 0, 1, 2, 3, 4'tür.

+1

'myArray [5] 'i döndürmek, bu durum için bir' ArrayIndexOutOfBoundsException 'sonucunu verebilir. –

+0

"ancak bu öğelerin dizinleri 0, 1, 2, 3, 4'tür." Kodunuzu cevapta güncellemek istiyor musunuz? –

+0

İyi nokta :) Kapalı bir <3 – Matt

İlgili konular