使用扫描仪从TXT文件中获取输入,并找到最常见的字母不起作用


import java.util.*;
import java.io.*;
public class extraCredit{
    public static void main(String args[])
    throws FileNotFoundException{
        Scanner sc = new Scanner(new File("decrypt.txt"));
        while(sc.hasNextLine()){
            String line = sc.nextLine();
            int tempCount = 0;
            int maxCount = 0;
            char maxLetter = 'a';
            String alphabet = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
            for(int i = 0; i < alphabet.length() - 1 ; i++){
                char lLetter = alphabet.charAt(i);
                i++;
                char uLetter = alphabet.charAt(i); 
                for(int a = 0; a < line.length(); a++){     
                    if(line.charAt(a) == lLetter | line.charAt(a) == uLetter){
                        tempCount ++;
                    }
                }
                if(tempCount > maxCount){
                    maxCount = tempCount;
                    maxLetter = lLetter;
                }
            }
            System.out.println(maxLetter + maxCount);
        }
    }
}

这是我的额外信用分配的代码。该程序的目的是说出最常出现的字母。我从decrypt.txt的一条线中制作了一个字符串。我的逻辑是要进行临时计数以跟踪首字母,然后进入B上,如果该字母的温度计数较高,那么现在是最大计数。我将所有字母大写和较低的案件彼此相邻放置,这样我就可以使用.charat(i(将lletter和uletter用于较低的案例字母和上限字母。最后,它应该输出最高计数的内容。此Java文件编译,但不会输出任何内容。谁能帮我弄清楚什么问题。我觉得这种逻辑是合理的。谢谢。

kyviv zj r sreb kyrk tivuzkj pfli rttflek vrty dfiezex nzky£86,400。ZK triizvj fmvi ef srcretv wifd urp kf urp。vmvip vmvezex uvcvkvj nyrkvmvi grik fw kyv srcretv pfl wrzcvu kf ljv ljv ulizex kyv kyv urp。Nyrk nflcu pfl uf?UIRN FLK RCC FW ZK,fw tflijv !!!!vrty fw lj yrj jlty r sreb。ZKJ ERDV ZJ KZDV。vmvip dfiezex,zk tivuzkj pfl nzky 86,400 jvtfeuj。VMVIP EZXYK ZK NIZKVJ FWW,RJ CFJK,NYRKVMVI FW KYZJ PFL YRMV wrzcvu kf kf zemvjk zemvjk kf xffu xffu gligfjv。ZK Triizvj FMVI EF SRCRETV。ZK rccfnj ef fmviuirwk。Vrty URP ZK fgvej r evn rttflek wfi pfl。vrty ezxyk zk sliej kyv ivdrzej fw kyv urp。ZW PFL WRZC KF LJV KYV urp’j uvgfjzkj,kyv cfjj zj pflij。Kyviv ZJ EF XFZEX SRTB。kyviv zj ef uirnzex rxrzejk kyv" kfdfiifn。"pfl dljk czmv ze kyv givjvek fe kfurp’j uvgfjzkj。zemvjk zk jf rj kf xvk wifd zk kyv lkdfjk ze yvrcky,yrggzevjj,reu jlttvjj!KYV TCFTB ZJ Ileezex。drbv kyv dfjk fw kfurp。

这是文本,但都在TXT文件中的一行中。

如果可能的话,您是否可以尝试帮助我弄清楚为什么我制作的那个是不起作用的而不是编写新程序。我看到的那些包含许多我们尚未学到的工具。谢谢。

import java.util.*;
import java.io.*;
public class extraCredit2{
public static void main(String args[])
throws FileNotFoundException{
    //Scanner sc = new Scanner(new File("decrypt.txt"));
    //while (sc.hasNextLine()) {
        //String line = sc.nextLine();
        String line = "ashdbskjdbfkjsnfdkfjssjaandkjbsdkfjnsndkfkjnfwjneijfnweifjwbshdbfjhbaskjdnaskdjbdf";
        int tempCount = 0;
        int maxCount = 0;
        String maxLetter = "a";
        String alphabet = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
        for (int i = 0; i < alphabet.length() - 1; i++) {
            tempCount = 0;
            String lLetter = alphabet.charAt(i) + "";
            i++;
            String uLetter = alphabet.charAt(i) + "";
            for (int a = 0; a < line.length(); a++) {
                if ((line.charAt(a) + "").equals(lLetter) | (line.charAt(a) + "").equals(uLetter)) {
                    tempCount++;
                }
            }
            if (tempCount > maxCount) {
                maxCount = tempCount;
                maxLetter = lLetter;
            }
        }
        System.out.println(maxLetter + maxCount);
    //}
}
}

此新代码可行,但是我评论了.txt文件部分,然后制作了另一个字符串。谢谢大家。

查看是否有效

public class extraCredit{
    public static void main(String args[])
throws FileNotFoundException{
    Map<String,Integer> letCounts = new HashMap<String,Integer>();
    Scanner sc = new Scanner(new File("decrypt.txt"));
    while(sc.hasNextLine()){
        String line = sc.nextLine();
        for(String s : line.split(""))
            if(letCounts.containsKey(s))
                letCounts.put(s,letCounts.get(s)+1);
            else
                letCounts.put(s,1);
    }
    int maxCount=0;
    for(Map.Entry<String, Integer> e : letCounts.entrySet())
    {
        maxCount=Math.max(maxCount, e.getValue());
    }
    for(Map.Entry<String, Integer> e : letCounts.entrySet())
    {
        if(e.getValue()==maxCount)
            System.out.println(e.getKey()+e.getValue());
    }
  }
}

更新环路

while (sc.hasNextLine()) {
        String line = sc.nextLine();
        int tempCount = 0;
        int maxCount = 0;
        String maxLetter = "a";
        String alphabet = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
        for (int i = 0; i < alphabet.length() ; i++) {
            tempCount = 0;
            String lLetter = alphabet.charAt(i) + "";
            for (int a = 0; a < line.length(); a++) {
                if ((line.charAt(a) + "").equals(lLetter)) {
                    tempCount++;
                }
            }
            if (tempCount > maxCount) {
                maxCount = tempCount;
                maxLetter = lLetter;
            }
        }
        System.out.println(maxLetter + maxCount);
    }

这给出

v72 for

Kyviv zj r sreb kyrk tivuzkj pfli rttflek vrty dfiezex nzky £86,400. Zk triizvj fmvi ef srcretv wifd urp kf urp. Vmvip vmvezex uvcvkvj nyrkvmvi grik fw kyv srcretv pfl wrzcvu kf ljv ulizex kyv urp. Nyrk nflcu pfl uf? Uirn flk RCC FW ZK, fw tflijv!!!! Vrty fw lj yrj jlty r sreb. Zkj erdv zj KZDV. Vmvip dfiezex, zk tivuzkj pfl nzky 86,400 jvtfeuj. Vmvip ezxyk zk nizkvj fww, rj cfjk, nyrkvmvi fw kyzj pfl yrmv wrzcvu kf zemvjk kf xffu gligfjv. Zk triizvj fmvi ef srcretv. Zk rccfnj ef fmviuirwk. Vrty urp zk fgvej r evn rttflek wfi pfl. Vrty ezxyk zk sliej kyv ivdrzej fw kyv urp. Zw pfl wrzc kf ljv kyv urp’j uvgfjzkj, kyv cfjj zj pflij. Kyviv zj ef xfzex srtb. Kyviv zj ef uirnzex rxrzejk kyv “kfdfiifn.” Pfl dljk czmv ze kyv givjvek fe kfurp’j uvgfjzkj. Zemvjk zk jf rj kf xvk wifd zk kyv lkdfjk ze yvrcky, yrggzevjj, reu jlttvjj! Kyv tcftb zj ileezex. Drbv kyv dfjk fw kfurp.
public class ExtraCredit {
public static void main(String args[]) throws FileNotFoundException {
    String line = "this is a test";
    String[] splitLine = line.split("");
    HashMap<String,Integer> lettersMap = new HashMap<String, Integer>();
    // Load HashMap with letters and the number of appearances
    for (int i = 0; i < splitLine.length; i++) {
        String letter = splitLine[i];
        if (!letter.equals("")) {
            if (lettersMap.containsKey(letter)) {
                int currentValue = lettersMap.get(letter);
                lettersMap.put(letter, ++currentValue);
            } else {
                lettersMap.put(letter, 1);
            }   
        }
    }
    Iterator<Entry<String, Integer>> mapIterator = lettersMap.entrySet().iterator();
    int highestValue = 0;
    String highestLetter = new String();
    while (mapIterator.hasNext()) {
        Entry<String, Integer> pair = mapIterator.next();
        if (pair.getValue() > highestValue) {
            highestValue = pair.getValue();
            highestLetter = pair.getKey();
        }           
        mapIterator.remove();
    }
    System.out.println("Letter: "+highestLetter+" "+"Times: "+highestValue);
}

}

这个应该起作用!

相关内容

最新更新