У меня есть массив в виде
{1, a, D, 3, h, 2, C, Z, $, o, 5}
массив результатов должен быть
{1, 3, 2, 5, a, h, o, D, C, Z, $}
Где перестроенный массив должен иметь сначала числа, затем алфавиты в нижнем регистре, затем алфавиты в верхнем регистре и, наконец, специальные символы без использования другого массива.. как это сделать?
Заранее спасибо...
private static void arrangeArrayInOrder(List<Character> arr) {
for (int i = 0; i < arr.size(); i++) {
if (arr.get(i) >= '0' && arr.get(i) <= '9') {
arr.add(arr.get(i));
arr.remove(i);
}
}
}
сначала я попытался переместить все свои целые числа в свой массив последним и удалить его из исходной позиции, а также попытался сделать то же самое с оставшимися условиями ... но застрял здесь, сам не мог двигаться дальше.
Thank u in advance
... Stack Overflow не является бесплатной службой написания коротких кодов, как McDonald's (которая, однако, подает картофель фри, а не код). Если вам нужна помощь, вам придется показать нам какой-нибудь код, который вы жарили (извините... пытался).
Извините за это, я добавил код, который пробовал, пожалуйста, посмотрите
Я сделал свою логику, и она работает следующим образом:
numbers, small, capitals and special
символов.For-loop
и начните вставлять их в нужное место.Рабочий код:
public class stackLong
{
static char[] array = {'1', 'a', 'B', '2', 'h', '3', 'C', 'Z', '$', 'o', '5'};
public static void main(String[] args)
{
int number=0,small=0,capital=0,special=0;
//calculates the total number of characters of each type
for(int i =0; i<array.length;i++)
{
if (array[i]>=65 && array[i]<=90) // capital
capital++;
else if (array[i]>=97 && array[i]<=122) //small
small++;
else if (array[i]>=48 && array[i]<=57) // number
number++;
else if ((array[i]>0 && array[i]<=47)||(array[i]>=58 && array[i]<=64)|| (array[i]>=91 && array[i]<=96)||(array[i]>=123 && array[i]<=127))
special++;
}
// sets their starting index
int smallIndex = number;
int capitalIndex = small + smallIndex;
int specialIndex = capitalIndex + capital;
number = 0;
for(int i =0; i<array.length;i++)
{
if (array[i]>=48 && array[i]<=57) // number
{
swap(i,number);
number++;
}
}
for(int i =smallIndex; i<array.length;i++)
{
if (array[i]>=97 && array[i]<=122) //small
{
swap(i,smallIndex);
smallIndex++;
}
}
for(int i =capitalIndex; i<array.length;i++)
{
if (array[i]>=65 && array[i]<=90) // capital
{
swap(i,capitalIndex);
capitalIndex++;
}
}
for(int i =specialIndex; i<array.length;i++) // special
{
if ((array[i]>0 && array[i]<=47)||(array[i]>=58 && array[i]<=64)|| (array[i]>=91 && array[i]<=96)||(array[i]>=123 && array[i]<=127))
{
swap(i,specialIndex);
specialIndex++;
}
}
System.out.printf("\n");
for(int j =0; j<array.length;j++)
{
System.out.printf(array[j] + " ");
}
}
public static void swap(int frst, int scnd)
{
char temp = array[frst];
array[frst] = array[scnd];
array[scnd] = temp;
}
}
ПРИМЕЧАНИЕ: Есть несколько способов сделать это, это может показаться немного наивным, но во время интервью они просто хотят знать, находитесь ли вы на правильном пути, чтобы найти решение, просто ходить вокруг да около.
Вы поняли логику? Если да, то я рад помочь. Если вы найдете какой-либо ответ, который поможет, вы всегда можете проголосовать за него :)
Какие-нибудь попытки пока?