Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
discount 30 + hiring

Diskuze: prosím o pomoc nevím jak udělat zbytek :(

Aktivity
Avatar
Petr Slavik
Člen
Avatar
Petr Slavik:6.5.2020 10:55

Potřebuji nejít ještě nejsteklejší písmeno ale nevím jak..

Zkusil jsem: /*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.Buffe­redReader;
import java.io.FileReader;
import java.util.Arra­yList;
/**
*
* @author Petr
*/
public class Statistika {
public static void main(String[] args) throws Exception {
String line, word = "";
int count = 0, maxCount = 0;
ArrayList<String> words = new ArrayList<Strin­g>();

FileReader file = new FileReader("da­ta.txt ");
BufferedReader br = new BufferedReader(fi­le);

while != null) {
String string[] = line.toLowerCa­se().split("([,­.\\s]+) ");

for(String s : string){
words.add(s);
}
}

for(int i = 0; i < words.size(); i++){
count = 1;

for(int j = i+1; j < words.size(); j++){
if(words.get(i)­.equals(words­.get(j))){
count++;
}
}

if(count > maxCount){
maxCount = count;
word = words.get(i);
}
}

System.out.prin­tln("Nejcastej­si slovo: " + word);
br.close();
}

}

Chci docílit: ...

 
Odpovědět
6.5.2020 10:55
Avatar
Odpovídá na Petr Slavik
Matúš Olejník:6.5.2020 11:57

Konečne niekto, kto sa skutočne o niečo aj pokúsil :) Len by si mohol napísať trocha viacej slov ohľadom zadania, "nejsteklejší" myslíš najčastejšie? A najčastejšie písmeno alebo slovo? A skopíroval si to sem dobre? Pretože táto časť nedáva zmysel

while != null) {

A rovnako by si kód mohol vložiť medzi značky ktoré sa ti doplnia ak stlačíš Ctrl + K čím bude vyzerať ako tento kúsok vyššie.

Editováno 6.5.2020 11:58
Nahoru Odpovědět
6.5.2020 11:57
/* I am not sure why this works but it fixes the problem */
Avatar
Petr Slavik
Člen
Avatar
Odpovídá na Matúš Olejník
Petr Slavik:6.5.2020 12:04

Promiň je to špatně, jo a je to nejčastější a hledám nejčastější písmeni slovo už mám ale písmeno nevím.

package tryy;

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.Buffe­redReader;
import java.io.FileReader;
import java.util.Arra­yList;
/**
*
* @author Petr
*/
public class Statistika {
public static void main(String[] args) throws Exception {
String line, word = "";
int count = 0, maxCount = 0;
ArrayList<String> words = new ArrayList<Strin­g>();

FileReader file = new FileReader("C:\\U­sers\\svecj\\Dow­nloads\\statis­tika.txt ");
BufferedReader br = new BufferedReader(fi­le);

while != null) {
String string[] = line.toLowerCa­se().split("([,­.\\s]+) ");

for(String s : string){
words.add(s);
}
}

for(int i = 0; i < words.size(); i++){
count = 1;

for(int j = i+1; j < words.size(); j++){
if(words.get(i)­.equals(words­.get(j))){
count++;
}
}

if(count > maxCount){
maxCount = count;
word = words.get(i);
}
}

System.out.prin­tln("Nejcastej­si slovo: " + word);
br.close();
}

}

 
Nahoru Odpovědět
6.5.2020 12:04
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:6.5.2020 12:19
  1. používej pro vkládání kódu anotaci (ty dvě špičaté závorky tady nad textovými areami </>)
  2. máš tam minimálně syntaktickou chybu u whilu, kdy ti chybí otevírací závorka a argument, který nemá být rovno null (předpokládám, že tam chceš mít
while ((line = br.readLine()) != null) {
...
}

)

  1. Máš ještě mezeru v pojmenovaném dokumentu, což může dělat problémy
  2. Co tím myslíš, "nejsteklejší" písmeno?

Jestli to mělo znamenat nejčastější písmeno, tak by to mohlo vypadat následovně. Snad se v tom vyznáš, zvýraznil jsem ti i řádky, které jsem upravil:

package com.frontend;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Statistika {

  private static final String PATTERN = "([,.\\s]+)"; //<-- ADDED
  private static int largestCountOfElements = 0; //<-- ADDED
  private static List<Character> mostlyUsedCharacterList = new ArrayList<>(); //<-- ADDED

  public static void main(String[] args) throws Exception {
    String line;
    String word = "";
    int count = 0;
    int maxCount = 0;
    List<String> words = new ArrayList<>();
    List<Character> letters = new ArrayList<>(); //<-- ADDED

    FileReader file = new FileReader("data.txt");
    BufferedReader br = new BufferedReader(file);

    while ((line = br.readLine()) != null) {
      String string[] = line.toLowerCase().split(PATTERN); //<-- CHANGED
      for (String s : string) {
        words.add(s);
      }
      line = line.toLowerCase().trim().replaceAll(PATTERN, ""); //<-- ADDED
      for (char letter : line.toCharArray()) { //<-- ADDED
        letters.add(letter); //<-- ADDED
      } //<-- ADDED
    }

    for (int i = 0; i < words.size(); i++) {
      count = 1;
      for (int j = i + 1; j < words.size(); j++) {
        if (words.get(i).equals(words.get(j))) {
          count++;
        }
      }

      if (count > maxCount) {
        maxCount = count;
        word = words.get(i);
      }
    }

    Set<Character> collectionWithoutDuplications = new HashSet<>(letters); //<-- ADDED BLOCK
    collectionWithoutDuplications.forEach(evt -> {
      int countOfFoundedLetters = 0;
      for (char letter : letters) {
        if (evt.equals(letter)) {
          countOfFoundedLetters++;
        }
      }
      if (largestCountOfElements < countOfFoundedLetters) {
        largestCountOfElements = countOfFoundedLetters;
        mostlyUsedCharacterList.clear();
        mostlyUsedCharacterList.add(evt);
      } else if (largestCountOfElements == countOfFoundedLetters) {
        mostlyUsedCharacterList.add(evt);
      }
    }); //<-- ADDED BLOCK

    System.out.println("Nejcastejsi slovo: " + word);
    System.out.println("Nejčastější písmeno/a: " + mostlyUsedCharacterList); //<-- ADDED
    br.close();
  }
}

Jen jsem si s tím trošku pohrál, takže to vrací nejen nejčastější písmeno, ale i možnost, že tam bude stejný počet nejčastějších písmen :)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
6.5.2020 12:19
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:6.5.2020 12:20

PS: Omlouvám se za ten balíček, nevytvářel jsem nový projekt, ale hodil jsem to do projektu, který jsem rychle otevřel, takže ten si změň :)

Nahoru Odpovědět
6.5.2020 12:20
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Petr Slavik
Člen
Avatar
Odpovídá na Lubor Pešek
Petr Slavik:6.5.2020 12:21

Děkuju moc

 
Nahoru Odpovědět
6.5.2020 12:21
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:6.5.2020 12:23

jinak jen pro info - ten set jsem použil proto, protože kolekce Set ti nedovolí duplikátní hodnoty.
Takže mi to ušetřilo jedno procházení cyklu, kdy jsem už znal unikátní hodnoty a pak jsem je jen porovnával, kolikrát tam ta hodnota je.

Nahoru Odpovědět
6.5.2020 12:23
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.