Produzir texto mais longo e mais curto em um arquivo, e encontrar palíndromo não está funcionando?

Rachel Livings:

Eu parcialmente codificado um programa que é suposto para ler um arquivo de uma lista de cidades, determinar quais são as mais longas e mais curta nome-sábio, e sua saída será em um arquivo separado. No entanto, eu não consigo descobrir por que a partir da lista de cidades, não está me dando o mais longo e mais curto

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.");
    }
}

A lista de cidades do arquivo de texto são Alexandria, Virginia, Aurora, Illinois, Austin, Kinikinik, Texas, Boston, Massachusetts, Chandler, Arizona, Charlotte, Carolina do Norte, Dallas, Dayton, Ohio, Elizabeth, New Jersey, Eugene, Oregon , Gilbert, Houston, Jackson, Mississippi, e Glenelg, ea saída Eu sempre obter é Massachusetts por mais tempo e um espaço em branco / nada para o mais curto, o que é incorreto. Eu também queria saber como / onde eu possa incorporar este pedaço de código em meu 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();
   }
}

Ele encontra o palíndromo no arquivo perfeitamente, mas eu não tenho certeza de onde colocá-lo sem ele looping infinito.

TLDR; Meu código não está me dando a palavra correta a mais longa e mais curta quando a leitura de um arquivo, e eu gostaria de saber onde posso colocar o meu código separado para o meu primeiro código, de modo que ambos possam correr juntos. No final, eu também gostaria de saída de toda esta informação (mais longas, mais curto, e palavras palíndromo) para um txt separado, mas eu não sei como.

* EDIT: A resposta de anupamD ajudou a resolver o meu problema de leitura string. Eu ainda gostaria de saber onde posso colocar o meu código palidrome no meu código comprimento.

Macaco :

Você pode verificar o seguinte código, portanto, para a primeira parte da sua pergunta "em branco / nada para menor" que você precisa para obter a primeira corda de seu arquivo e atribuir seu comprimento para ambos maxe minvariáveis em seu código e, posteriormente, obter a próxima seqüência de arquivo em seu whileloop, que você já está fazendo anyway.In seu problema código era sua minsempre foi 0e seu if(len<min)nunca se ser verdade que é por isso que você estava recebendo corda mais curta como esvaziar o tempo todo.

E para segunda parte da sua pergunta * como / onde eu posso incorporar este pedaço de código em meu código (isto é palíndromo código) *, você pode criar um método separado findPalindrome()e chamar esse método de seu código existente, uma vez que quando feito com encontrar mais curto e mais longa seqüência de seu arquivo.

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();
    }
}

Resultado:

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

E se você não quiser ler o arquivo duas vezes, você pode usar o código abaixo

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 "";
}

Resultado:

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

Acho que você gosta

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