Instrukcje warunkowe

0

Mam kod, ktory powinien podawac 'login' skladajacy sie z 4 pierwszych znakow imienia i 3 pierwszych znakow numeru identyfikacyjnego (przy zalozeniu, ze jezeli ktores z pol nie spelnia warunkow, podawane jest cale bez ograniczen - np. imie mniejsze niz 4)

Konstruktor

    public Student(String fullName, String studentID)
    {
        name = fullName;
        id = studentID;
        credits = 0;
    }

Metoda dawania loginu

    public String getLoginName()
    {
        String rvariable = null;
        if (name.length() < 4)
        {
            if (id.length() < 3)
            {
                rvariable = name + id;
            }

            rvariable = name + id.substring(0,3);

        }
        else
        {
            rvariable = name.substring(0,4) + id.substring(0,3);
        }

        if (id.length() < 3)
        {
            if (name.length() < 4)
            {
                rvariable = name + id;
            }

            rvariable = name.substring(0,4) + id;
        }
        else
        {
            rvariable = name.substring(0,4) + id.substring(0,3);
        }

        return rvariable;
    }

Jak podaje 'zle' dane to mowi ze nie da rady "java.lang.StringIndexOutOfBoundsException: String index out of range: 4"

0
public String getLoginName() {
        String rvariable = null;
        if (name.length() < 4) {
            if (id.length() < 3) {
                rvariable = name + id;
                return rvariable;
            }else{
                rvariable = name + id.substring(0, 3);
                return rvariable;
            }
        } 
        if (id.length() < 3) {
            if (name.length() < 4) {
                rvariable = name + id;
                return rvariable;
            }else{
                rvariable = name.substring(0, 4) + id;
                return rvariable;
            }
        } else {
            rvariable = name.substring(0, 4) + id.substring(0, 3);
            return rvariable;
        }       
    }

ale da się, a nawet powinno się to napisać jakoś bardziej elegancko

0
public class IDTest {

    public static String login = "LOGIN";
    public static String login2 = "LOG";

    public static int id = 1234;
    public static int id2 = 12;

    public static void main(String[] args) {
        System.out.println(getLoginName(login, ""+id));
        System.out.println(getLoginName(login, ""+id2));
        System.out.println(getLoginName(login2, ""+id2));
        System.out.println(getLoginName(login2, ""+id));
    }

    public static String getLoginName(String login, String id) {
        String logPart = (login.length() < 4) ? login : login.substring(0, 4);
        String idPart = (id.length() < 3) ? id : id.substring(0, 3);
        return logPart + idPart;
    }
}

Kochamy operator trójargumentowy ;)

Sygnatura jest moja, ale tylko na potrzeby tego przykładu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0