java - 字符在 while 循环中不增加数组计数器?

标签 java

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;


public class Vowels
{
 public static void main(String[] args) throws FileNotFoundException
  {
  String vowels = "aeiou";
  int[] counters = new int[vowels.length()];

  Scanner console = new Scanner(System.in);
  System.out.print("Input file: ");
  String inputFileName = console.next();

  console.useDelimiter(""); 
  while (console.hasNext())
  {   

      char ch = console.next().charAt(0);
      ch = Character.toLowerCase(ch);
        if(ch == 'a')
        {
           counters[0]++;
        }
        if(ch == 'e')
        {
           counters[1]++;
        }
        if(ch == 'i')
        {
           counters[2]++;
        }
        if(ch == 'o')
        {
           counters[3]++;
        }
        if(ch == 'u')
        {
           counters[4]++;
        }
  }




  for (int i = 0; i < vowels.length(); i++)
  {
     System.out.println(vowels.charAt(i) + ": " + counters[i]);
  }

  }
 }

当我运行文件时,只有当它应该检测到数百个 e 时,它​​才会检测到 3 个 e。我没有发现我的代码存在任何会导致问题的问题,请帮助。我假设它必须在我的分隔符和结束时间之间,因为其余部分不在书中。

最佳答案

您的分隔符没有按照您想象的方式工作。假设您打算从 inputFileName 读取数据,您可以构造一个 FileScanner 来执行此操作(记住关闭 Scannerfinally block 中,或者使用 try-with-resources statement )。您还可以通过元音元音的位置确定正确的计数器索引。最后,您可以使用格式化的 io 作为输出循环。比如,

String vowels = "aeiou";
int[] counters = new int[vowels.length()];

Scanner console = new Scanner(System.in);
System.out.print("Input file: ");
String inputFileName = console.nextLine().trim();
try (Scanner scan = new Scanner(new File(inputFileName))) {
    while (scan.hasNextLine()) {
        for (char ch : scan.nextLine().toLowerCase().toCharArray()) {
            int p = vowels.indexOf(ch);
            if (p >= 0) {
                counters[p]++;
            }
        }
    }
}
for (int i = 0; i < vowels.length(); i++) {
    System.out.printf("%c: %d%n", vowels.charAt(i), counters[i]);
}

关于java - 字符在 while 循环中不增加数组计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122375/

相关文章:

java - 如何重命名Java的线程

java - 如何在 OAuth 1.0a 中获取请求 token 和 secret

java - 运行时获取jar版本

java - 并发标记和清除中的 "abort preclean due to time"

Spring UnsatisfiedDependencyException 且不是托管类型 : class java. lang.Object

java - 如何通过泛型实例化?

java - modcluster (Wildfly) 未检测到来自 Apache 的 Advertize

java - 在 Mule 应用程序中使用参数

java - 当我点击 html 表单上的提交按钮时,有没有办法运行 java 类?

java - 来自数据库的 Spring 属性持有者