public class ATMTest
{
    public static int readDate() throws IOException
    {
      //此处有代码
      while(true)
      {
          //此处有代码
           if()return 1;
           else if()return 0;
           else return 3;       }
    }
   public static void main(String[] args)
   {
    switch(readDate())
    {
        case 1:------
        case 0:-----
        default:-----
     }
    }
}
就是这样,我想用readDate()函数通过判断条件传递给主函数中的switch几个int值,但是编译不通过,显示的是readDate()函数没有返回值,求解,在线等!

解决方案 »

  1.   

    readDate()方法结尾加个return语句
      

  2.   

    public static int readDate() throws IOException
    看到你有抛IOException异常~while(true)是不是写在try块里?是的话在最后再写一个return 0;
    以后代码最好贴全~其实没什么大不了的,要有开源精神
      

  3.   

    readDate()方法结尾加个return语句啊,循环里面的返回值不会作为方法的返回值的,要给方法一个返回值,哪怕用不到那个返回值
      

  4.   

    public static int readDate() throws IOException
      {
      //此处有代码
      while(true)
      {
      //此处有代码
      if()return 1;
      else if()return 0;
      return 3;  }
      }
    这样试试,其实最好是在开始设一下初始值
    初始值一般为报错的那个值,比如io异常啊,或者什么的,看你业务逻辑然后
    int re = 0
    逻辑处理
    re=xxx;
    逻辑处理
    return re;
      

  5.   

     while(true)
      {
      //此处有代码
      if()return 1;
      else if()return 0;
      else return 3;  }
    后加个return *;
      

  6.   

    public static int readDate() throws IOException你这儿有抛异常,但public static void main(String[] args)没有抛并且main里也没有try...catch()....难道不会报错么?
    public class DownAction {

    public static void main(String[] args) {

    switch (getData()) {
    case 1: {
    System.out.println("1111");
    break;
    }
    case 2: {
    System.out.println("22222222");
    break;
    }
    case 0: {
    System.out.println("00000");
    break;
    }
    default :{
    System.out.println("no data");
    }
    }
    }

    public static int getData() {
    int x = 5;
    while(true) {
    if(x<3) return 1;
    else if (x>=3 && x <5) return 2;
    else return 0;
    }
    }}
    //可能打印出00000
      

  7.   

    readDate()后显示写个return 语句,要不然编译器认为你没有返回值
      

  8.   

    首先readDate()的写法是没有问题的,虽然写法不是很好,编译是没有问题的,
    其次编译报的错不是因为你说的 readDate()函数没有返回值 ,而是你在main函数里没有处理readDate()函数
    里可能抛出的IOException异常,两种方法,
    一种
    public static void main(String[] args) throws IOException {
    另一种
    try {
    switch (readDate()) {
    case 1:
    ;
    case 0:
    ;
    default:
    ;
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
      

  9.   

    import java.util.Scanner;
    import java.util.*;
    import java.io.*;class Manager
    {
    public  Manager(int id,int mm,int money,String DaiHao,int year,int month,int day)
    {
    ID=id;
    MM=mm;
    GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
    }
    private int ID;
    private int MM;
    private String DaiHao;
    private Date hireDay;

    }
    class User
    {
    public  User(int id,int mm,int money,String DaiHao,int year,int month,int day)
    {
    ID=id;
    MM=mm;
    GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
    }
    private int ID;
    private int MM;
    private String DaiHao;
    private Date hireDay;

    }
    public class ATMTest 
    {
    public static int  readDate() throws IOException
    {

    try
    {
        System.out.print("请输入卡号:");
    Scanner inpu_1=new Scanner(System.in);
    String str_1=inpu_1.nextLine();             
    int MID=Integer.parseInt(str_1);

    System.out.print("请输入密码:");
    Scanner inpu_2=new Scanner(System.in);
    String str_2=inpu_2.nextLine();             
    int MMM=Integer.parseInt(str_2);

    while(true)
    {
    BufferedReader inpu = new BufferedReader(new FileReader("UserInfo.txt"));
    String s = inpu.readLine();
    if(s==null)
    {

    return 3;
    }
    StringTokenizer t = new StringTokenizer(s,"#");
    String STR_1 = t.nextToken();
    int ID=Integer.parseInt(STR_1);
    int MM = Integer.parseInt(t.nextToken());
    int money = Integer.parseInt(t.nextToken());
    String STR_2=t.nextToken(); 
    int y = Integer.parseInt(t.nextToken());
    int m = Integer.parseInt(t.nextToken());
    int d = Integer.parseInt(t.nextToken());
    GregorianCalendar calendar = new GregorianCalendar(y,m-1,d);
    Date vhireDay = calendar.getTime();
    if((MM==MMM)&&(ID==MID)&&"ADMIN"==STR_2 )
    {
    return 0;
    }
    else if((MM==MMM)&&(ID==MID)&&"HQ"==STR_2)
    {
    return 1;
    }
    else
    return 3;
    }
      }
      catch(IOException exception)
      {
            exception.printStackTrace();
            return 3;
      }
    }
        public static void main(String[] args) throws IOException
    {
    switch(readDate())
    {
    case 0:
    System.out.println("欢迎您!管理员!");
    System.out.println("****************");
    System.out.println("1.查询所有活期用户信息");
    System.out.println("2.创建活期用户");
    System.out.println("3.查询当前ATM现金余额");
    System.out.println("4.修改密码");
    System.out.println("0.退出");
    System.out.println("****************");
    break;
    case 1:
    System.out.println("用户登陆成功");
    System.out.println("****************");
    System.out.println("1.查询余额");
    System.out.println("2.存款");
    System.out.println("3.取款");
    System.out.println("4.查询存取款明细");
    System.out.println("5.修改密码"); 
    System.out.println("0.退出");
    System.out.println("****************");
    break;
    default:
    System.exit(0);
    break;
    }
    }

    }
    这是我的源代码,写的有点垃圾啊,呵呵,勿喷...但是总是显示找不到import java.util.Scanner;
    import java.util.*;
    import java.io.*;class Manager
    {
    public  Manager(int id,int mm,int money,String DaiHao,int year,int month,int day)
    {
    ID=id;
    MM=mm;
    GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
    }
    private int ID;
    private int MM;
    private String DaiHao;
    private Date hireDay;

    }
    class User
    {
    public  User(int id,int mm,int money,String DaiHao,int year,int month,int day)
    {
    ID=id;
    MM=mm;
    GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
    }
    private int ID;
    private int MM;
    private String DaiHao;
    private Date hireDay;

    }
    public class ATMTest 
    {
    public static int  readDate() throws IOException
    {

    try
    {
        System.out.print("请输入卡号:");
    Scanner inpu_1=new Scanner(System.in);
    String str_1=inpu_1.nextLine();             
    int MID=Integer.parseInt(str_1);

    System.out.print("请输入密码:");
    Scanner inpu_2=new Scanner(System.in);
    String str_2=inpu_2.nextLine();             
    int MMM=Integer.parseInt(str_2);

    while(true)
    {
    BufferedReader inpu = new BufferedReader(new FileReader("UserInfo.txt"));
    String s = inpu.readLine();
    if(s==null)
    {

    return 3;
    }
    StringTokenizer t = new StringTokenizer(s,"#");
    String STR_1 = t.nextToken();
    int ID=Integer.parseInt(STR_1);
    int MM = Integer.parseInt(t.nextToken());
    int money = Integer.parseInt(t.nextToken());
    String STR_2=t.nextToken(); 
    int y = Integer.parseInt(t.nextToken());
    int m = Integer.parseInt(t.nextToken());
    int d = Integer.parseInt(t.nextToken());
    GregorianCalendar calendar = new GregorianCalendar(y,m-1,d);
    Date vhireDay = calendar.getTime();
    if((MM==MMM)&&(ID==MID)&&"ADMIN"==STR_2 )
    {
    return 0;
    }
    else if((MM==MMM)&&(ID==MID)&&"HQ"==STR_2)
    {
    return 1;
    }
    else
    return 3;
    }
      }
      catch(IOException exception)
      {
            exception.printStackTrace();
            return 3;
      }
    }
        public static void main(String[] args) throws IOException
    {
    switch(readDate())
    {
    case 0:
    System.out.println("欢迎您!管理员!");
    System.out.println("****************");
    System.out.println("1.查询所有活期用户信息");
    System.out.println("2.创建活期用户");
    System.out.println("3.查询当前ATM现金余额");
    System.out.println("4.修改密码");
    System.out.println("0.退出");
    System.out.println("****************");
    break;
    case 1:
    System.out.println("用户登陆成功");
    System.out.println("****************");
    System.out.println("1.查询余额");
    System.out.println("2.存款");
    System.out.println("3.取款");
    System.out.println("4.查询存取款明细");
    System.out.println("5.修改密码"); 
    System.out.println("0.退出");
    System.out.println("****************");
    break;
    default:
    System.exit(0);
    break;
    }
    }

    }
    这是我的源代码,不好,勿喷啊,呵呵...但是显示无法找到UserInfo.txt文件,让我很上火;还有就是我的readDate()函数听几位仁兄说,貌似返回值有问题啊,请问,我的这个函数,能够给switch正确返回int 型从而判断身份吗?谢谢
      

  10.   

    readDate()函数的返回值应该没有问题
    UserInfo.txt可能没在你的编译目录下,可以试试绝对路径,比如E:/UserInfo.txt
      

  11.   


    实际中的代码或许有什么地方忘记了 return语句。现在看,while()不会报错!
      

  12.   

    我尝试了一下绝对路径后,出现这个问题
    请输入卡号:2011001
    请输入密码:123
    Exception in thread "main" java.lang.NumberFormatException: For input string: "2 "
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at ATMTest.readDate(ATMTest.java:67)//int d = Integer.parseInt(t.nextToken());
    at ATMTest.main(ATMTest.java:92)//switch(readDate())
      

  13.   

    readDate后面加一个返回值,因为在编译的时候,他是不会看你while()循环中的条件的,假如
    while循环中的条件是假的话,这个函数有返回值么?
    要理解编译和运行之前的不同;
      

  14.   

    咳咳,火眼金睛啊!呵呵,真的是这块的问题...改了之后,运行后没有BUG了,但是貌似无法读取readDate()函数,所以输入完密码账号后,就卡住了,没有接着往下运行
      

  15.   

    不是缺少返回值,是楼主没有catch所有异常吧?在后面加个catch(Exception e){
    //处理。
    return 你想要的值 3;
    }
    试试看吧,尽量以后把try块写小点,养成好的风格
      

  16.   

    总结一下:1.修改了文档的路径,使用绝对路径
              2.文档内数字“2”的后面空格删去了
              3.处理了几处异常
              4.修改了readDate()的返回值
             *5.在字符串比较重,使用if(STR_2.equals("HQ"))替换原本错误的if(STR_2=="HQ")
    现在登陆界面已能成功运行,感谢各位的帮助!