2016-04-12 12 views
0

İçindeki sözcükleri içeren bir metin dosyasını kabul eden bir program oluşturmamı, her kelimeyi geçmesini ve ardından kelimeyi en çok çıktısını almamı isteyen bir ödev üzerinde çalışıyorum çift ​​harfli miktar. Yani bir metin dosyası 2 kelime içeriyorsa (örneğin geçmiş ve ilerici), aşamalı olarak çıktı olur. Sorunum programın her harfi bir sözcükle karşılaştırmasını sağlamaktır. Özellikle her kelimeyi harflerine nasıl bölebileceğimi anlayamıyorum. İşte şimdiye kadar sahip olduğum şey.Bir dizi listesini Java'daki tek tek harflere ayırma

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Doubles { 

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    ///Prompts the user to give a file. 
    System.out.println("Enter the location of your file..."); 
    String location = keyboard.next(); 
    Scanner file = null; 
    List<String> list = new ArrayList<String>(); 
    ///If the the file location is wrong, give an error. 
    try { 
     file = new Scanner(new File(location)); 
    } catch (FileNotFoundException e) { 
     System.out.println("Error: File not found"); 
     System.exit(1); 
    } 


    while(file.hasNext()){ 
     String word = file.nextLine(); 
     list.add(word); 
    } 
    ///System.out.println(list); 
    keyboard.close(); 

    doublefinder(list); 

} 

private static void doublefinder(List<String> list) { 
     ///Code to separate and compare letters. 
    } 

} 

Birçok farklı yaklaşımı denedim ama bir çözüm bulamıyorum. Herhangi bir yardım çok takdir edilecektir.

+2

Tam olarak tam olarak ne denediniz? –

cevap

0

Her öğenin kelimenin bir harfi olduğu bir char dizisi oluşturmak için .toCharArray yöntemini kullanabilirsiniz. aşağıdaki gibi

bir örnek uygulamasıdır: string çift kelime olup olmadığını

public static boolean isDoubleword(String str){ 
    char[] letters = str.toCharArray(); 
    for(int i = 0; i< letters.length-1; i++){ 
     if(letters[i] == letters[i+1])return true; 
    } 
    return false; 
} 

yukarıdaki fonksiyon bir dize ve döner alır.

0

Arem,

Ben bir dize alır ve çift harflerin sayısını döndüren bir yöntem haline getirmek kullanacağı yaklaşım. Bu String.toCharArray() kullanılarak yapılabilir; işlevi. Ardından, bir dizede kaç tane çift harften var olduğunu görmek için harfleri karşılaştırmak üzere bu diziyi tekrarlayabilirsiniz.

örn.

public static int numDoubles(String str) { 
    int numDoubles = 0; 
    char[] blah = str.toCharArray() 
    for(int i = 0; i < str.length(); i++ { 
     //if the character == nextChar 
     numDoubles++; 
    } 
    return numDoubles; 
} 

Dizelerinizi karşılaştırmak için bu dönüş değerini kullanın.

0

yöntem çift harf sayısı en yüksek olan kelime dönecektir yukarıda gösterilen

private String doubleFinder(List<String> list){ 
    int maxDoubleLetters = 0; 
    int maxDoubleLettersID = 0; // the position of the word in your list 
    for(int n = 0; n < list.size(); n++){ // cycle throught each word 
     String word = list.get(n); // get a word from the list 
     char[] letters = word.toCharArray(); // split the word into letters 
     int doubleLetters = 0; 
     for(int i = 1; i < letters.length; i++){ // search for all double letters 
      if(letters[i] == letters[i-1]) doubleLetters++; 
     } 
     if(doubleLetters > maxDoubleLetters){ 
      maxDoubleLetters = doubleLetters; 
      maxDoubleLettersID = n; 
     } 
    } 
    if(maxDoubleLetters > 0) 
     return list.get(maxDoubleLetters); 
    else 
     return null; 
} 

yöntemle gibi görünebilir. Dosya çift harfli bir sözcük içermiyorsa, yöntem null döndürecektir.

Not: Bu, üçlü harfler içeren kelimeler için çalışmaz.

Başka sorunuz varsa, yorum bölümünde sormaktan çekinmeyin.