这段代码的目标是创建一个程序,使用 java 的 main 方法来分析用户输入的一段文本。
他们通过将文本输入扫描仪然后由程序分析来做到这一点。分析是产生词频,平均长度,并以星号图表的形式打印出结果,单个“*”代表1个词。
例如“鸟可能会飞”应该输出这个结果:
Enter Text:
Birds can maybe fly
Birds can maybe fly
3 letter words: 2
5 letter words: 2
mean length: 4.0
3 letter words: **
5 letter words: **
Enter Text:
但相反,我得到了这个
Enter text:
Birds can maybe fly
Birds can maybe fly
3 letter words: 2
3 letter words: *
mean lenght: 4.0
3 letter words: 2
3 letter words: **
mean lenght: 4.0
5 letter words: 2
5 letter words: *
mean lenght: 4.0
5 letter words: 2
5 letter words: **
mean lenght: 4.0
Enter text:
有没有办法改变我的代码,以便输出在第一部分中看到的内容,而不是我在第二部分中看到的内容。
代码:
import java.util.Scanner;
public class Freq
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
while (true)
{
System.out.println("Enter text: ");
String s;
s = scan.nextLine();
String input = s;
String strippedInput = input.replaceAll("\\W", " ");
System.out.println("" + strippedInput);
String[] strings = strippedInput.split(" ");
int[] counts = new int[6];
int total = 0;
for (String str : strings)
if (str.length() < counts.length)
counts[str.length()] += 1;
for (String s1 : strings)
total += s1.length();
for (int i = 1; i < counts.length; i++){
StringBuilder sb = new StringBuilder(i).append(i + " letter words: ");
for (int j = 1; j <= counts[i]; j++) {
sb.append('*');
System.out.println(i + " letter words: " + counts[i]);
System.out.println(sb);
System.out.println(("mean lenght: ") + ((double) total / strings.length));
}}}}}