我的代码中的嵌套开关有什么问题?

问题描述 投票:0回答:1

我想在下面的代码案例'F'和案例'S'中创建2个链接列表,以创建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;

    }
}

获取输出:F4空的1个出

转到外部开关的第一种情况'F',然后选择情况4,然后直接转到外部开关并转到外部开关的'默认'。但是我不明白为什么在对内部开关“ F”进行一次case-4处理后,它会从内部开关中消失。

使用的功能是(如果需要):

    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();
}
java linked-list switch-statement
1个回答
0
投票

我相信问题是您在'F'开关的末尾有不必要的break;,在这里:

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());

您的代码很难阅读,甚至对您来说也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.