说明:
编写一个程序,读取一行结束的文本 有一段时期,作为哨兵价值。显示所有 文本中出现的字母,每行一个字母和字母 顺序,以及每个字母在文本中出现的次数。 使用长度为26的基本类型int数组,以便元素位于 index 0包含
a
的个数。和索引1包含b
s等的数量。
package alphabetize;
import java.util.*;
public class Alphabetize
{
private static void number(String s)
{
int[] array = new int[26];
s = s.toUpperCase();
System.out.println(s);
for (int i = 0; i < s.length(); ++i)
{
if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z')
{
++array[s.charAt(i) - 'A'];
}
}
for (int i = 0; i < 26; ++i)
{
System.out.println("|" + (char) ('A' + i) + "|" + array[i] + "|");
}
}
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
String aString = ".";
while (true)
{
System.out.println("Please enter sentence with a period to end");
aString = keyboard.nextLine();
if (".".equals(aString))
{
System.exit(0);
}
number(aString);
}
}
}
仍有问题与期间的事情..它似乎没有像我做的那样工作。
答案 0 :(得分:2)
考虑到这是一个功课,说明非常具体,你应该逐个字符地阅读文本,而不是使用内置函数
如果您的文本文件类似于
abcabca.
输出应该是出现三次,b出现两次等等。
所以你的算法应该是
答案 1 :(得分:1)
是否要求此作业是用Java完成的? “sendinal character”的整个想法,而不仅仅是使用行终结符是非常奇怪的。
无论如何,您可以通过设置Scanner
的分隔符来实现您想要的行为:
keyboard.useDelimiter("\\.");
至于循环,这是一个很大的暗示:
int[] counts;
counts[chars[0] - 'a'] = counts[chars[0] - 'a'] + 1;
或只是
counts[chars[0] - 'a']++;
我会让你把它包含在循环中。
如果您 正在寻找一次性输入,我建议您使用InputStreamReader
代替Scanner
作为输入。这是一个基本的骨架:
Reader reader = new InputStreamReader(System.in);
while (true) {
int nextInput = reader.read();
if (nextInput == -1) {
System.out.println("End of input reached without sentinal character");
break;
}
char nextChar = (char) nextInput;
//deal with next character
}
仍然,read()
通常会阻塞,直到达到输入结束( CTRL - D 或 CTRL - <来自大多数控制台的kbd> Z 或发送新行。因此,在输入“。”后,你仍然需要做一些事情,因此使用的字符数量有限。
答案 2 :(得分:0)
现在你把字符串字符放在一个循环中,并且必须检查那个字符是什么样的:
if its a 'a' : increase the value at index 0 by 1.
if its a 'd' : increase the value at index 3 by 1.
明智的。
稍后用a,z显示整个数组以及0到25之间的索引。
建议:如果不需要使用数组,并且您可以使用任何其他数据结构,则可以非常轻松地在 HashMap 中实现相同的结构。通过保持'a','z'作为键并计为相应的值。然后检索和显示值也会更容易。
答案 3 :(得分:0)
您需要一个int数组(例如int[] counts = new int[26];
)读取输入行后,在循环中逐个字符地检查它。如果字符不是句点,则递增计数数组的相应元素。 (如果字符为a
,则增加counts[0]
;如果为b
,则增加counts[1]
;等等。提示:您可以从字符中减去a
获得适当的索引。)当你找到一个句点时,退出循环并打印结果(可能使用第二个循环)。