我想在下面的代码中创建 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 输出
转到外部开关的第一个情况“F”并选择情况 4 后,直接转到外部开关并转到外部开关的“默认”。但我不明白为什么在执行了内部开关“F”的第一种情况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();
}
最佳答案
我认为问题在于您在“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());
你的代码很难读,甚至对你来说也是如此。
如果删除提到的 break;
没有帮助,那么首先考虑重构并提供更多代码,因此实际上可以为其他人编译和测试它 - 例如 Node
类和用户输入。
关于java - 我的代码中的嵌套开关有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60023652/