Очередь на основе символов Java с использованием массива

David спросил: 07 октября 2018 в 02:19 в: java

Ниже приведен код для символьной очереди с использованием массива. В настоящее время я могу вставлять символы в массив, но при возврате я получаю несколько случайных чисел после проверки индекса. Что нужно изменить здесь, чтобы увидеть толкаемого персонажа? Например, "Array Deque: 97" возвращает 97 вместо a.

------------ выходные данные --------------- Операции с массивами

  1. add
  2. get
  3. set
  4. remove
  5. отметьте пустым
  6. clear
  7. size

    1

Введите индекс и элемент

0

a

Задание массива: 97

Продолжить (введите y или n)


import java.util.Scanner;
class ArrayDeque
{
private int[] a;
private int j, n;
public ArrayDeque()
{
j = 0;
n = 0;
resize();
}public boolean isEmpty()
{
return n == 0;
}public void clear()
{
j = 0;
n = 0;
resize();
}
public int getSize()
{
return n;
}
private void resize()
{
int[] temp = new int[Math.max(2 * n, 1)];
for (int k = 0; k < n; k++)
temp[k] = a[(j + k) % a.length];
a = temp;
j = 0;
}
public int get(int i)
{
return a[(j + i) % a.length];
}public int set(int i, int x)
{
int y = a[(j + i) % a.length];
a[(j + i) % a.length] = x;
return y; 
}void add(int i, int x)
{
if (n + 1 > a.length)
resize();
if (i < n/2)
{
j = (j == 0) ? a.length - 1 : j - 1;for (int k = 0; k <= i - 1; k++)
a[(j + k) % a.length] = a[(j + k + 1)%a.length];
}
else
{
for (int k = n; k > i; k--)
a[(j + k) % a.length] = a[(j + k - 1)%a.length];
}
a[(j + i) % a.length] = x;
n++;
}public int remove(int i)
{
int x = a[(j + i) % a.length];
if (i < n/2)
{for (int k = i; k > 0; k--)
a[(j + k) % a.length] = a[(j + k - 1) % a.length];j = (j + 1) % a.length;
}
else
{
for (int k = i; k < n - 1; k++)
a[(j + k) % a.length] = a[(j + k + 1) % a.length];
}
n--;
if (3 * n < a.length)
resize();
return x;
}public void display()
{
System.out.print("\nArray Deque : ");
int p = j;
for (int i = 0; i < n; i++)
{
System.out.print(a[p % a.length] +" ");
p++;
}
System.out.println();
}
}public class ArrayDequeTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Array Deque Test\n");ArrayDeque ad = new ArrayDeque();char ch;
do
{
System.out.println("\nArray Deque Operations\n");
System.out.println("1. add");
System.out.println("2. get");
System.out.println("3. set");
System.out.println("4. remove");
System.out.println("5. check empty");
System.out.println("6. clear");
System.out.println("7. size");int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter index and element");
ad.add(scan.nextInt(), scan.next().charAt(0) );   
break;
case 2 :
System.out.println("Enter index");
System.out.println("Result : "+ ad.get(scan.nextInt() ));
break;
case 3 :
System.out.println("Enter index and element");
ad.set(scan.nextInt(), scan.nextInt() );
break;
case 4 :
System.out.println("\nEnter index");
ad.remove(scan.nextInt() );
break;
case 5 :
System.out.println("\nEmpty Status : "+ ad.isEmpty());
break;
case 6 :
System.out.println("\nArray Deque Cleared");
ad.clear();
break;
case 7 :
System.out.println("\nSize = "+ ad.getSize() );
break;   
default :
System.out.println("Wrong Entry \n ");
break;   
}
ad.display();   System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
}
}

0 ответов