2017-04-18 4 views
0
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ファイルはコンパイルされますが、何も出力されません。誰でも私が間違っていることを理解する手助けをすることができますか?私はこの論理が健全であるように感じます。ありがとうございました。スキャナを使用してtxtファイルから入力を受け取り、動作しない最も一般的な文字を見つける

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? UCCは、RCC FW ZK、fw tflijv !!!! Vrty fw lj yrj jlty r sreb。 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のfmviuirk。 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。キビフはキリスト教徒であり、キリスト教徒である。キリスト教徒はキリスト教徒である。キリスト教徒はキリスト教徒である。 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ファイルの1行にあります。

可能であれば、新しいプログラムを書くのではなく、私が作ったものがなぜ機能しないのか理解してください。私が見たものには、まだ学んでいない多くのツールが含まれています。ありがとうございました。

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ファイルの部分をコメントアウトして別の文字列を作成しました。皆さん、ありがとうございました。

+0

デバッガの使い方を学んでください。 – tnw

+0

類似のプログラムのサンプルがここに実装されました - http://stackoverflow.com/questions/19600409/scanner-will-take-user-input-but-will-not-find-the-file?rq=1また、ファイルをクラスと同じフォルダに配置することを忘れないでください。 –

+0

ファイルが存在することを確認してください(一部のシステムでは大文字と小文字が区別されることに注意してください)。空ではなく、例外がスローされていないことを確認してください。 –

答えて

0

これは

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); 
    } 

を動作するかどうか、これは

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. 
+0

これはうまくいくかどうかは疑いがありませんが、line.split containsKey Map.Entryのような、クラスでは紹介されていない多くのツールを使用しています。しかし、これを試していただきありがとうございます。 – Dominick

+0

私は入力 'alsfbouwdbnvubwquovnoqwnv'oipnwovnoiqenguojivnweoivnu4bnwuwn4roviunevoui4nrbwouvwnvemk'のコードを実行し、私は' 201'を参照してください。これは期待された出力です – AbtPst

+0

私はそれが実際に文字を出力することを意図したので、これはおそらくcharのint値をintに加えます。私の上には何も出力されません、多分私は間違った場所にファイルを持っています。 – Dominick

0
0123用

v72を与える参照してください。

}

これは機能するはずです。

+0

これを入力していただきありがとうございますが、これは私がよく慣れていない多くのツールを使用しています – Dominick

関連する問題