链表java中的单词出现
我必须在链表中查找单词,但不将单词存储到地图中。我只能使用链表。输出:单词、出现次数、百分比。有人能帮忙吗链表java中的单词出现,java,Java,我必须在链表中查找单词,但不将单词存储到地图中。我只能使用链表。输出:单词、出现次数、百分比。有人能帮忙吗 public class Linkedlist { private LinkedList<String> list = new LinkedList<String>(); public void readFile() { File file = new File("words.txt"); try {
public class Linkedlist {
private LinkedList<String> list = new LinkedList<String>();
public void readFile() {
File file = new File("words.txt");
try {
Scanner sc = new Scanner(file);
String words;
while (sc.hasNext()) {
words = sc.next();
words = words.toLowerCase();
Collections.sort(list);
if (words.length() >= 2) {
if (list.contains(words)) {
}
}
sc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public void showList() {
System.out.println(list);
}
public static void main(String args[]) {
Linkedlist abc = new Linkedlist();
abc.readFile();
abc.showList();
}
}
公共类链接列表{
私有LinkedList=新建LinkedList();
公共void readFile(){
文件=新文件(“words.txt”);
试一试{
扫描仪sc=新扫描仪(文件);
字符串;
while(sc.hasNext()){
words=sc.next();
words=words.toLowerCase();
集合。排序(列表);
if(words.length()>=2){
如果(列表包含(文字)){
}
}
sc.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}
}
公开作废展示清单(){
系统输出打印项次(列表);
}
公共静态void main(字符串参数[]){
Linkedlist abc=新建Linkedlist();
abc.readFile();
abc.showList();
}
}
像这样的东西应该可以用
Collections.sort(words);
String last = null;
int n = 0;
for (String w : words) {
if (w.equals(last)) {
n++;
} else {
if (last != null) {
System.out.printf("%s %d %.1f%%%n", last, n, 100.0 * n / words.size());
}
last = w;
n = 1;
}
}
System.out.printf("%s %d %.1f%%%n", last, n, 100.0 * n / words.size());
“比输出:字数、发生率、百分比”--如何“发生率”和“百分比”是应该计算的吗?@Sasha看到他之前的问题了吗?通过排序列表,你几乎完成了任务。现在,将一个元素与前一个元素进行比较,可以告诉你每个单词出现的时间、出现的次数等。你到底想计算什么?换句话说:保留对前一个单词的引用。如果当前单词!=前一个单词,那么前一个单词以前的单词将不再出现。因此,您可以知道它出现了多少次。无论如何,我们可以避免上述代码逻辑中的2个while循环吗?一个while循环有助于存储值,另一个用于计算百分比。while循环针对n个元素运行,因此有2个while循环将使用$O(n)运行复杂性你能解释一下上述逻辑吗?
try {
Scanner sc = new Scanner(file);
String words;
while (sc.hasNext()) {
words = sc.next().toLowerCase();
list.add(words);
}
Scanner sc1=new Scanner(file);
int i=0;
while (sc1.hasNext()) {
words = sc1.next().toLowerCase();
double count=0;
while(i<list.size()){
if(list.get(i).equalsIgnoreCase(words)){
count++;
i++;
}
else
break;
}
if(count !=0)
System.out.println(words+" "+(Double)count/list.size());
}
sc.close();
sc1.close();
}
car 0.5
van 0.25
bus 0.25
[car, car, van, bus]