Impresión de texto más largo y más corto en un archivo, y la búsqueda palíndromo no funciona?

Rachel Livings:

He codificado parcialmente un programa que se supone que leer un archivo de una lista de ciudades, determinar cuales son los más largos y más corto en cuanto al nombre, y la salida en un archivo separado. Sin embargo, no puedo entender por qué de la lista de ciudades, no me da la más larga y más corta

import java.io.*;
import java.util.Scanner;
public class testing
{
    public static void main(String args[])throws IOException
    {
        Scanner sc = new Scanner(new File("C:/code/names.txt"));
        String city="", longest="", shortest="";
        int len=0, min = 0, max = 0;

        while(sc.hasNext())
        {
            city= sc.nextLine();
            len= city.length();
            if(len>max)
            {
                max=len;
                longest=city;
            }
            if(len<min)
            {
                min=len;
                shortest=city;
            }
        }
        System.out.println(longest + " is the longest name.");
        System.out.println(shortest + " is the shortest name.");
    }
}

La lista de ciudades en el archivo de texto son Alexandria, Virginia, Aurora, Illinois, Austin, Kinikinik, Texas, Boston, Massachusetts, Chandler, Arizona, Charlotte, Carolina del Norte, Dallas, Dayton, Ohio, Elizabeth, Nueva Jersey, Eugene, Oregon , Gilbert, Houston, Jackson, Mississippi, y Glenelg, y la salida es siempre me Massachusetts durante más tiempo y un espacio en blanco / nada por menor, lo cual es incorrecto. También me preguntaba cómo / dónde puedo incorporar este pedazo de código en el código

import java.io.*;
import java.util.Scanner;
public class palindrome_demo
{
public static void main(String args[]) throws IOException
 {

    String s="";
    Scanner sc= new Scanner(new File("c:/code/names.txt"));
    while(sc.hasNextLine())
        {
            String word = sc.nextLine();

            for(int i = word.length() - 1; i >= 0; i--)
            {
                s = s + word.charAt(i);
            }

            if (word.equalsIgnoreCase(s))
            {
                System.out.println(word + " is a palindrome");
            }
            s="";
            }
        sc.close();
   }
}

Se encuentra el palíndromo en el archivo de la perfección, pero no estoy seguro de dónde colocarla sin ella bucle infinito.

TLDR; Mi código no me está dando la palabra correcta largo y más corto cuando se lee de un archivo, y me gustaría saber donde puedo poner mi código separado en mi primer código, por lo que ambos pueden correr juntos. Al final, me gustaría también como para dar salida a toda esta información (más largas, más cortas y palabras palíndromo) a un txt separado, pero no estoy seguro de cómo.

* EDIT: La respuesta de anupamD ayudó a resolver mi problema de lectura cadena. Todavía me gustaría saber dónde puedo poner mi código palidrome en mi código de longitud.

Mono :

Puede comprobar el siguiente código, por lo que para la primera parte de su pregunta "en blanco / nada por menor" que necesita para obtener la primera cadena a partir de su archivo y asignar su longitud a la vez maxy minlas variables en el código y posteriormente obtener la siguiente cadena de archivo en el whilelazo, que ya lo están haciendo anyway.In su problema era que su código minfue siempre 0y su if(len<min)nunca fue verdad que es por eso que estaba recibiendo de cadena más corta como vaciar cada vez.

Y para segunda parte de su pregunta * cómo / dónde puedo incorporar este pedazo de código en el código (es decir palíndromo código) *, puede crear un método separado findPalindrome()y llamar a este método desde el código existente, una vez cuando se hace con la búsqueda de más corta y la cadena más larga de su archivo.

public class Practice {

    public static void main(String args[])throws IOException {
        Scanner sc = new Scanner(new File("c:/code/names.txt"));
        String city="", longest="", shortest="";
        int len=0, min = 0, max = 0;

        if(sc.hasNext()) {
             city= sc.nextLine();
             len= city.length();
             min = len;
             max=len;
             longest=city;
             shortest=city;
        }

        while(sc.hasNext()) {
            city= sc.nextLine();
            len= city.length();
            if(len>max)
            {
                max=len;
                longest=city;
            }
            if(len<min)
            {
                min=len;
                shortest=city;
            }
        }
        System.out.println(longest + " is the longest name.");
        System.out.println(shortest + " is the shortest name.");
        findPalindrome();
    }


    public static void findPalindrome() throws FileNotFoundException {
        String s="";
        Scanner sc= new Scanner(new File("c:/code/names.txt"));
        while(sc.hasNextLine()) {
            String word = sc.nextLine();

            for(int i = word.length() - 1; i >= 0; i--){
                s = s + word.charAt(i);
            }

            if (word.equalsIgnoreCase(s)){
                System.out.println(word + " is a palindrome");
            }
            s="";
        }
        sc.close();
    }
}

Salida:

Massachusetts is the longest name.
Ohio is the shortest name.
Kinikinik is a palindrome
Glenelg is a palindrome

Y si no desea leer el archivo dos veces, puede utilizar el siguiente código

public static void main(String args[])throws IOException {
    Scanner sc = new Scanner(new File("c:/code/names.txt"));
    String city="", longest="", shortest="";
    int len=0, min = 0, max = 0;
    String palindromeStr = "";
    if(sc.hasNext()) {
         city= sc.nextLine();
         len= city.length();
         min = len;
         max=len;
         longest=city;
         shortest=city;
         palindromeStr = findPalindrome(city);
    }

    while(sc.hasNext()) {
        city= sc.nextLine();
        len= city.length();
        if(len>max)
        {
            max=len;
            longest=city;
        }
        if(len<min)
        {
            min=len;
            shortest=city;
        }
        palindromeStr += findPalindrome(city);
    }
    System.out.println(longest + " is the longest name.");
    System.out.println(shortest + " is the shortest name.");
    System.out.println(palindromeStr);
}


public static String findPalindrome(String word) throws FileNotFoundException {
    String s="";
    for(int i = word.length() - 1; i >= 0; i--){
        s = s + word.charAt(i);
    }
    if (word.equalsIgnoreCase(s)){
       return word + " is a palindrome\n";
    }
    s="";
    return "";
}

Salida:

Massachusetts is the longest name.
Ohio is the shortest name.
Kinikinik is a palindrome
Glenelg is a palindrome

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=282707&siteId=1
Recomendado
Clasificación