Моя идея сделать - сделать уникальный ID для каждого пользователя. Он содержит как символы, так и целые. Первые две буквы идентификатора будут инициалами имени пользователя, четыре следующих должны указывать год, а последние три - случайные.
public String getUserID(){
String[] ID = new String[9];
ID[0] = String.valueOf(name.charAt(1));
ID[1] = String.valueOf(surname.charAt(2));
int years = Date_Of_Birth.getYear();
int[] numOfYears = new int[4];
for(int i = 0; i < 4; i++)
{
int a = years%10;
a = numOfYears[i];
years /= 10;
ID[i] = numOfYears[i]; // Java.lang.string, not int
}
Random random = new Random();
int a = Integer.toString(random.nextInt(9)); // Java.lang.string, not int
int b = random.nextInt(9) + 1;
int c = random.nextInt(9) + 1;
ID[7] = a;
ID[8] = b;
ID[9] = c;
}
Я борюсь с заменой интеграторов на строки, а также наоборот. Я пробовал несколько вещей вроде String.valueOf () или целых чисел, но все это кажется безнадежным.
Не могли бы вы уточнить, какие у вас проблемы с String.valueOf(int) и Integer.valueOf( String)?
Я думаю, что у вас есть одна проблема, заключающаяся в том, что у вас есть массив строк String[] ID = new String[9], но это дает вам девять разных струн. Возможно, вам нужна всего одна строка для идентификатора, и вам следует использовать конкатенацию («строка» + «один») или StringBuilder, чтобы получить строку идентификатора.
Оба IDEA показывают, что это несовместимые типы, требуется - int, а задано - java.lang.string.
Я попробую построить одну струну!
Немного изменил его, как предложил @markspace. Вместо того, чтобы использовать полный идентификатор в виде массива, я сгруппировал его в более мелкие массивы и целые числа и суммировал их как целую строку.




Проверь это:
public String getUserID(){
StringBuilder sb = new StringBuilder();
sb.append(name.substring(0, 1));
sb.append(surname.substring(0, 1));
sb.append(String.valueOf(Date_Of_Birth.getYear()));
Random random = new Random();
for (int i = 1; i <= 3; i++) {
int a = random.nextInt(9) + 1;
sb.append(String.valueOf(a));
}
return sb.toString();
}
он использует SringBuilder для пошагового построения идентификатора:
namesurnameDate_Of_Birth.getYear())StringBuilderАлгоритм не гарантирует уникальный идентификатор пользователя. Вы также должны проверить, существует ли уже идентификатор пользователя, и повторять генерацию случайных чисел, пока не получите уникальный идентификатор пользователя. Также может быть, что трех цифр недостаточно, например, если имя пользователя - Джеймс Смит или другое имя, которое в настоящее время очень популярно. Наиболее распространенные имена
@JonathanRosenne, конечно, нет. Это просто способ OP для получения идентификатора.
Используйте StringBuilder, чтобы построить только один String вместо массива String[].
Random random = new Random();
StringBuilder builder = new StringBuilder();
builder.append(name.charAt(1))
.append(surname.charAt(2))
.append(Date_Of_Birth.getYear())
.append(100 + random.nextInt(900)));
return builder.toString();
Это отличное решение, но разве random.nextInt(900) не вернет максимум 900? И 900 + 100 = 1000, что означает, что есть вероятность, что последнее добавление строки будет состоять из 4 символов вместо 3?
@ cokeby190 верхняя граница 900 не включает, поэтому вызов возвращает числа [0, 899] согласно javadoc.
да ладно понял! Это действительно отличный способ получить трехзначное случайное число! (:
После изменений код выглядит так, на мой взгляд, все в порядке.
public String getUserID(){
String[] IDletters = new String[2];
IDletters[0] = String.valueOf(name.charAt(1));
IDletters[1] = String.valueOf(surname.charAt(2));
int years = Date_Of_Birth.getYear();
int[] numOfYears = new int[4];
for(int i = 0; i < 4; i++)
{
int a = years%10;
a = numOfYears[i];
years /= 10;
}
Random random = new Random();
int a = random.nextInt(9)+1;
int b = random.nextInt(9)+1;
int c = random.nextInt(9)+1;
String wholeID = IDletters[0]+IDletters[1]+numOfYears[0]+numOfYears[1]+numOfYears[2]+numOfYears[3]+ a + b + c;
return wholeID;
}
Можно использовать
Integer.toString(int)