坚持平均字长

时间:2014-08-01 12:27:15

标签: java java.util.scanner mean

此代码的目标是使用main方法java创建一个程序来分析从用户输入的文本文本。

他们通过将文本输入扫描仪来执行此操作,然后由程序进行分析。分析是产生词频,例如"这是一个测试"产生这个结果:

This is a test
1 letter words: 1
2 letter words: 1
3 letter words: 0
4 letter words: 2
5 letter words: 0

我坚持的一点是产生一个平均值/平均值,我的胆量告诉分裂 counts.length str.length但我并不是最好的java,而且我试图实现这一点,但我得到的只是错误。我不希望任何人只是给我代码,但如果有人能给我一些我应该做的提示,或者只是指出正确的方向,我将不胜感激。

代码:

import java.util.Scanner;
    public class Text_AD { 

    public static void main (String[] args) {

while(true){

    Scanner input = new Scanner(System.in);

    System.out.println("Enter text: "); 
    String s;
    s = input.nextLine();
    System.out.println("" + s);

    String[] strings = s.split(" ");
    int[] counts = new int[6];
    for(String str : strings)
        if(str.length() < counts.length) counts[str.length()] += 1;
    for(int i = 1; i < counts.length; i++)

        System.out.println(i + " letter words: " + counts[i]);  


    }}}

6 个答案:

答案 0 :(得分:3)

平均而言,我假设您的意思是平均值长度。我也假设你想要一个浮点意味着。在这种情况下,您只需要将strings中所有长度的总和除以数组本身的长度。

您可以执行以下操作;

int total = 0;
for(String s : strings) total += s.length();
System.out.println((double)total/strings.length);

我希望这会有所帮助。

答案 1 :(得分:1)

在不分解代码的情况下,您可以在for数组中运行counts[]循环,将所有值相加,然后除以counts.length以获得平均值。< / p>

请注意类型转换。你可能想要做双重除法而不是整数。

答案 2 :(得分:0)

这就是你要找的东西?

import java.util.Scanner;
public class While_Loop { 

public static void main (String[] args) {

    int lengthSum, wordCount;
    lengthSum = wordCount = 0;

    while(true){

    Scanner input = new Scanner(System.in);

    System.out.println("Enter text: "); 
    String s;
    s = input.nextLine();
    System.out.println("" + s);

    String[] strings = s.split(" ");
    int[] counts = new int[6];
    for(String str : strings)
        if(str.length() < counts.length) counts[str.length()] += 1;
        wordCount++;
        lengthSum += str.length();
    for(int i = 1; i < counts.length; i++)

        System.out.println(i + " letter words: " + counts[i]);  

    System.out.println("Average: " + lengthSum/wordCount);

  }}}

注意:我只在您的代码中添加了内容。它的编写方式非常混乱。我会清理一些for循环和最后的括号,以便练习使代码更具可读性。

答案 3 :(得分:0)

当我理解你是正确的时,你应该添加一个变量int totalCount = 0; 在你的最后一个for循环中totalCount += i*counts[i];

在循环之后,您可以简单地除以大小-1(因为0不计算)

double average = totalCount/(counts.length-1);

替代方式

您获取不带空格的输入字符串长度,并将其除以空格数+ 1(等于单词数)

答案 4 :(得分:0)

 Map<Integer,Integer> map = new HashMap<Integer,Integer>();


        System.out.println("Enter text: ");
        String s = "This is a sample text";
        System.out.println("" + s);

        String[] strings = s.split(" ");

        for(String str : strings) {                                                
            Integer counter = map.get(str.length())==null?0:map.get(str.length());
            map.put(str.length(),counter++);                
        }

        Integer sum=0;
        Integer counter=0;
        for(Integer len : map.keySet()) {
            sum+=len*map.get(len);
            counter+=map.get(len);
        }
        Double average = Double.valueOf(sum/counter);

或者你可以结合循环

答案 5 :(得分:-1)

可能对您有所帮助的建议(与具体问题无关)。

  1. 选择有意义的班级名称,而不是While_Loop
  2. 在循环开始之前执行Scanner input = new Scanner(System.in);
  3. 只要您阅读每一行,请执行以下操作。
  4. 使用"\\s+"分割线条。
  5. 使用Key作为Count(整数)创建HashMap,将Value作为具有该计数的单词列表。在循环外创建
  6. 对于每个分词,获取长度。并检查地图是否已经包含计数,获取列表(值),将当前单词添加到其中。否则,在列表中添加一个单词作为单个条目的新条目。
  7. 获取地图的keySet,添加所有键的值,即* count *列表中元素的数量*。然后除以元素总数。
  8. 是的,我知道这是一个非常大的更改(你可能会忽略它......)。但这是正确的方法。