import java.util.Scanner; import java.net.MalformedURLException; import java.net.URL; import java.io.IOException; public class Main { // takes user input and validates public static URL URLPrompt() throws MalformedURLException { URL pageLocation = null; Scanner in = new Scanner(System.in); System.out.println("Please enter a webpage URL to find all it's links: "); try { pageLocation = new URL(in.nextLine()); } catch (MalformedURLException exception) { System.out.println("Invalid URL"); URLPrompt(); } return pageLocation; } public static void main(String[] args) throws MalformedURLException, IOException { Scanner in = new Scanner(System.in); URL pageLocation = URLPrompt(); Scanner scan = new Scanner(pageLocation.openStream()); while (scan.hasNext()) { String webFile = scan.nextLine(); // Searches for all hyperlinks in <a href=> </a> form if (webFile.contains("<a href=") && webFile.contains("</a>")) { int x = webFile.indexOf("<a href="); int y = webFile.indexOf("</a>"); String link = webFile.substring(x, y + 4); System.out.printf("%s\n", link); } } scan.close(); in.close(); } }Por lo tanto, se supone que este programa debe tomar un enlace URL ingresado por el usuario e imprimir todos los hipervínculos en formato html, "a href" a la etiqueta de cierre "a". Este código hace exactamente eso si la URL es válida inicialmente. Sin embargo, si se ingresa una URL no válida, el sistema la detecta y el método Urlprompt se llama a sí mismo, cuando el método se llama a sí mismo después de una entrada no válida y luego se ingresa una URL válida durante la recursión, aparece una excepción de puntero nulo en la línea 24... ¿Cómo puedo Obtengo el método URLPrompt para llenar con precisión la variable pageLocation durante la recursión?
La llamada recursiva debe return URLPrompt() .
Por cierto: no usaría la recursividad para este propósito (es solo un desperdicio de marcos de pila), solo un ciclo while simple.