0

好的,所以我的程序是从用户接收一个到数据库的 URL,并通过计算平均值并显示它来处理这个数据库。我的算法工作得很好,我遇到的问题是 URL 异常的处理。如果用户输入了无效的 URL,我希望他们再试一次并输入正确的 URL,但是当用户再次输入 URL 时,不会处理来自 URL 的任何数据,并且我在输出中不断收到“NaN”。下面是 try catch 块,因为我相信问题出在那儿,如果可以,请帮忙。

//测试 URL //URL 工资 = new URL(" http://cs.armstrong.edu/liang/data/Salary.txt ");

    System.out.println("Enter The URL to the File ");
    Scanner UserInput = new Scanner(System.in);


    try
    {

        //Ask The User to Input the URL

        URL salary = new URL(UserInput.nextLine());



        Scanner Read = new Scanner(salary.openStream());



        while(Read.hasNextLine())
        {

            for(int i = 0; i < Faculty.length; i++)
            {



                String Firstname = Read.next();


                String Lastname = Read.next();

                String rank = Read.next();

                double  Salary = Read.nextDouble();


                if(rank.matches("assistant")) 

                {
                   Faculty[i] = new AssistantProfessor(Firstname, Lastname, rank, Salary);
                   allAssistantProff[i] = new AssistantProfessor(Firstname, Lastname, rank, Salary);
                   AssistantProfessors++;
                }

                if(rank.matches("associate"))

                {
                   Faculty[i] = new AssociateProfessor(Firstname, Lastname, rank ,Salary);
                   allAssociateProff[i] = new AssociateProfessor(Firstname, Lastname, rank ,Salary);
                   AssociateProfessors++;
                }

                if(rank.matches("full"))
                {

                    Faculty[i] = new FullProfessor(Firstname, Lastname, rank, Salary);
                    allFullProff[i] = new FullProfessor(Firstname, Lastname, rank, Salary); 
                    FullProfessors++;
                }

                    //System.out.println(Faculty[i]);   
                    //System.out.println(allAssistantProff[i]);
                    //System.out.println(allAssociateProff[i]);
                    //System.out.println(allFullProff[i]);



        }


        }


    }



     catch(MalformedURLException ex)
    {

        System.out.println("invalid URL" + " Try Again ");
        URL salary = new URL(UserInput.nextLine());
    }
4

2 回答 2

0

将您的 try-catch 移动到一个循环中,如下所示:

System.out.println("Enter The URL to the File ");
Scanner UserInput = new Scanner(System.in);
Scanner Read;
while (true) {
  try {
    URL salary = new URL(UserInput.nextLine());
    Read = new Scanner(salary.openStream());
    break;
  } catch(IOException ex) {
    System.out.println("Couldn't open URL. Try again.");
  }
}
while(Read.hasNextLine()) {
  /* Process your file as usual. */
}
于 2016-04-28T19:23:22.533 回答
0

您是否尝试过依次输入 2 个有效 url 来运行代码?

我问这个是因为我没有看到会重新启动“Scanner Read = new Scanner(salary.openStream());”的外部时间或“跳回”。线

如果你有一个外部跳转,你在异常处理中声明了一个局部变量salary,它将在catch块中的“}”之后被删除,这可能不是问题

于 2016-04-28T19:11:33.850 回答