顾里 :) 2023-02-20 21:07 采纳率: 78.6%
浏览 17
已结题

关于#bug#的问题,如何解决?(语言-java)

有没有会解决我这个bug啊,我输入错误的性别以后会正常回到输入学号的地方,但是我输入完了以后也就是走完一遍了,正常的话应该要结束这个方法了,但是它还会走到输入地址的地方,请问这个怎么解决

我希望的效果是走完一遍以后能直接在if那里退出当前这个方法,如果没有办法的话有什么其他办法解决吗?

/**
 * 添加member
 * @return member对象
 */
public static void add() {
  try {
    Member member = new Member();
    print("请输入学号:");
    Scanner studentNumberSc = new Scanner(System.in);
    long studentNumber = studentNumberSc.nextLong();
    print("请输入姓名:");
    Scanner nameSc = new Scanner(System.in);
    String name = nameSc.next();
    print("请输入年龄:");
    Scanner ageSc = new Scanner(System.in);
    Integer age = ageSc.nextInt();
    print("请输入性别(默认为男):");
    Scanner sexSc = new Scanner(System.in);
    String sex = sexSc.next();
    Integer sexInt = 1;
    if ("女".equals(sex)) {
      sexInt = 0;
    } else if ("男".equals(sex)) {
      sexInt = 1;
    } else {
      errorMsg("性别必须是男或女,请重新输入");
      add();
    }
    print("请输入家庭住址:");
    Scanner addressSc = new Scanner(System.in);
    String address = addressSc.next();
    print("请输入手机号:");
    Scanner phoneSc = new Scanner(System.in);
    String phone = phoneSc.next();
    if (!checkPhone(phone)) {
      errorMsg("手机号格式不正确,正确格式应为(13617823851),请重新输入");
      add();
    } else {
        if (longIsNotEmpty(studentNumber) || stringIsNotEmpty(name) || integerIsNotEmpty(age) || integerIsNotEmpty(sexInt) || stringIsNotEmpty(address) || stringIsNotEmpty(phone)) {
              member.setStudentNumber(studentNumber);
              member.setName(name);
              member.setAge(age);
              member.setSex(sexInt);
              member.setPhone(phone);
              member.setAddress(address);
              Boolean memberFlag = addMember(member);
              println(memberFlag ? "添加成功" : "添加失败");
       }
      } catch(Exception e) {
          errorMsg("年龄和学号必须为数字,请重新输入:");
          add();
      }
}
  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-02-20 22:13
    关注

    该回答引用ChatGPTᴼᴾᴱᴺᴬᴵ

    在性别输入的代码块中,当用户输入的性别既不是男也不是女时,你调用了递归函数add()来重新执行这个方法,但是并没有退出原始的函数。这意味着当递归调用add()方法时,它会继续执行剩余的代码,并且当递归调用返回时,会继续执行原始函数的剩余代码,导致出现了输入地址的问题。

    为了解决这个问题,你可以使用一个return语句在递归调用之后立即返回到原始函数的调用者。具体来说,你可以将递归调用的语句add()修改为return add()。这样,当递归调用返回时,它会立即退出原始函数,而不会继续执行剩余的代码。

    下面是修改后的代码片段:

    if ("女".equals(sex)) {
      sexInt = 0;
    } else if ("男".equals(sex)) {
      sexInt = 1;
    } else {
      errorMsg("性别必须是男或女,请重新输入");
      return add();  // 修改递归调用为 return add()
    }
    print("请输入家庭住址:");
    // ...
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败