В чем проблема с вложенным переключателем в моем коде? - PullRequest
0 голосов
/ 02 февраля 2020

Я хочу создать 2 связанных списка в приведенном ниже коде: регистр 'F' и регистр 'S', чтобы создать 2 связанных списка.

 outer:while(true) {
 switch(in.next().charAt(0))
    {
    case 'F':
          switch(in.nextInt())  
          {
           case 1:
            ll.insertF(in.nextInt());
            break;
        case 2:
            ll.insertR(in.nextInt());
            break;
        case 3:
            try {
            ll.insertP(ll.head, in.nextInt());
            }
            catch(Exception e)
            {
                System.out.println("Cannot do");
            }
            break;
        case 4:
            ll.display();
            break;
        case 5:
            ll.deleteR();
            break;
        case 6:
            ll.reverse();
            break;
        case 7:
            ll.concat(l2.head);
            break;
        default:
            break;
        }
          break;
   case 'S':
        switch(in.nextInt())    
              {
               case 1:
                l2.insertF(in.nextInt());
                break;
            case 2:
                l2.insertR(in.nextInt());
                break;
            case 3:
                try {
                l2.insertP(l2.head, in.nextInt());
                }
                catch(Exception e)
                {
                    System.out.println("Cannot do");
                }
                break;
            case 4:
                l2.display();
                break;
            case 5:
                l2.deleteR();
                break;
            case 6:
                l2.reverse();
                break;
            case 7:
                l2.concat(ll.head);
                break;
            default:
                break;
            }
              break;
        default:
            System.out.println("Out");
            break outer;

    }
}

Получение результата: F 4 Пусто 1 Out

После перехода к первому случаю «F» внешнего переключателя и выбора случая 4, а затем он непосредственно переходит к внешнему переключателю и переходит к «умолчанию» внешнего переключателя. Но я не понимаю, почему он выходит из внутреннего переключателя после выполнения одного случая-4 внутреннего переключателя -F.

Используются следующие функции (если это необходимо):

    public void insertF(int d)
{
    Node temp= new Node(d);
    temp.next=head;
    head= temp;
}
public void insertR(int d)
{
    Node temp= new Node(d);
    if(head==null)
    {
        head=temp;
        return;
    }
    Node cur=head;
    while(cur.next!=null)
        cur=cur.next;
    cur.next=temp;
}
public void insertP(Node p,int d)
{
    if(p==null) {
        System.out.println("No");
        return;
    }
    Node temp= new Node(d);
    temp.next=p.next;
    p.next=temp;

}
public void deleteR()
{
    if(head==null)
    {
        System.out.println("Empty");
        return;
    }
    if(head.next==null)
    {
        head=null;
        return;
    }
    Node cur=head;
    Node prev=null;
    while(cur.next!=null)
    {
        prev=cur;
        cur=cur.next;
    }
    cur=null;
    prev.next=null;
}
public void reverse()
{
    if(head==null ||head.next==null)
    {
        return;
    }
    Node cur=head;
    Node temp=cur.next;
    cur.next=null;
    Node next;
    while(temp.next!=null)
    {
    next=temp.next;
    temp.next=cur;
    cur=temp;
    temp=next;
    }
    temp.next=cur;
    head= temp;
    System.out.println("Reversed");

}
public void concat(Node h2)
{
    if((head==null && h2==null)||(h2==null))
    {
        return;
    }
    else if(head==null)
    {
        head=h2;
    }
    else {
        Node cur=head;
        while(cur.next!=null)
        {
            cur=cur.next;
        }
        cur.next=h2;
    }

}
public void display()
{
    if(head==null)
    {
        System.out.println("Empty");
        return;
    }
    Node cur=head;
    while(cur!=null)
    {
        System.out.print(cur.data+" ");
        cur=cur.next;
    }
    System.out.println();
}

1 Ответ

0 голосов
/ 02 февраля 2020

Я считаю, что проблема в том, что у вас есть break; в конце переключателя 'F', здесь:

case 'F':
          switch(in.nextInt())  
          {
           case 1:
            ll.insertF(in.nextInt());
            break;
        case 2:
            ll.insertR(in.nextInt());
            break;
        //...
        default:
            break;
        }
          break; // here
case 'S':

Однако я бы настоятельно рекомендовал реорганизовать ваш код в соответствии с OOP принципами Например, вместо вложенных переключателей сделайте что-то вроде:

case 'F':
          handleF(in.nextInt());
case 'S':
          handleS(in.nextInt());

Ваш код очень трудно читать, возможно, даже для вас.

Если удаление упомянутого break; не помогает, то сначала рассмотрите возможность рефакторинга и предоставления большего количества кода, так что на самом деле можно скомпилировать и протестировать его для кого-то другого - например, Node класс и пользовательский ввод.

...