Bu projeyle ilgili bir sorun yaşıyorum. Temel dayanak, kullanıcı bir deyim girer ve herhangi bir yinelenen sözcük bulması ve kaç tane olduğu varsayılır. Böyle merhaba merhaba merhaba merhaba merhabaJava, öğeleri bir ArrayList öğesinden kaldırma
bunun için çıkış olur ... gibi sadece bir kelime birden çok kez girerken
Sorunum;
"There are 2 duplicates of the word "hello" in the phrase you entered."
"There are 1 duplicates of the word "hello" in the phrase you entered."
Bu, yalnızca bu gibi durumlarda olduğu anlaşılıyor. Dışarıya atılan birden fazla kelimeyle rastgele bir ifadeyi girersem, doğru cevabı gösterir. Sorunun yinelenen kelimeleri kaldırmasıyla ve ifade ile kaç kez yinelendiği ile ilgili bir şey olduğunu düşünüyorum, ama kafamı etrafına saramam. Her yerde baskı çizgileri ekledim ve her türlü yolu yineleyen zamanları değiştirdim, bunu bir Java Görüntüleyicide gerçekleştirdim ve yine de tam olarak bulamadım. Herhangi bir yardım büyük beğeni topluyor!
Bu, çevrimiçi Java kursumun bir ödevi içindir, ancak bu sadece öğrenme/uygulama için ana başıma gitmemektedir. Sadece yardım etmek için cevap aramıyorum. benim kodunu düzenledi bazı önerilere dayalı
public class DuplicateWords {
public static void main(String[] args) {
List<String> inputList = new ArrayList<String>();
List<String> finalList = new ArrayList<String>();
int duplicateCounter;
String duplicateStr = "";
Scanner scan = new Scanner(System.in);
System.out.println("Enter a sentence to determine duplicate words entered: ");
String inputValue = scan.nextLine();
inputValue = inputValue.toLowerCase();
inputList = Arrays.asList(inputValue.split("\\s+"));
finalList.addAll(inputList);
for(int i = 0; i < inputList.size(); i++) {
duplicateCounter = 0;
for(int j = i + 1; j < finalList.size(); j++) {
if(finalList.get(i).equalsIgnoreCase(finalList.get(j))
&& !finalList.get(i).equals("!") && !finalList.get(i).equals(".")
&& !finalList.get(i).equals(":") && !finalList.get(i).equals(";")
&& !finalList.get(i).equals(",") && !finalList.get(i).equals("\"")
&& !finalList.get(i).equals("?")) {
duplicateCounter++;
duplicateStr = finalList.get(i).toUpperCase();
}
if(finalList.get(i).equalsIgnoreCase(finalList.get(j))) {
finalList.remove(j);
}
}
if(duplicateCounter > 0) {
System.out.printf("There are %s duplicates of the word \"%s\" in the phrase you entered.", duplicateCounter, duplicateStr);
System.out.println();
}
}
}
}
, ama ben doğru yönde gidiyorum emin değilim
String previous = "";
for(Iterator<String> i = inputList.iterator(); i.hasNext();) {
String current = i.next();
duplicateCounter = 0;
for(int j = + 1; j < finalList.size(); j++) {
if(current.equalsIgnoreCase(finalList.get(j))
&& !current.equals("!") && !current.equals(".")
&& !current.equals(":") && !current.equals(";")
&& !current.equals(",") && !current.equals("\"")
&& !current.equals("?")) {
duplicateCounter++;
duplicateStr = current.toUpperCase();
}
if(current.equals(previous)) {
i.remove();
}
}
if(duplicateCounter > 0) {
System.out.printf("There are %s duplicates of the word \"%s\" in the phrase you entered.", duplicateCounter, duplicateStr);
System.out.println();
}
}
. Bu beklenmedik davranışlara neden olur. Kullanmak için güvenli bir yöntem 'Iterator.remove()', bkz. Http://stackoverflow.com/a/223929/4190526 –
Öğelerini kaldırırken bir diziyi yinelemek isterseniz, sonundan başlamanızı öneririz. diziyi ve en üste yineleyin. – annena