有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java停留在平均字长上

这段代码的目标是使用主方法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.lengthbystr.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) 个答案

  1. # 1 楼答案

    这就是你要找的吗

    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循环和括号,以便练习使代码更具可读性

  2. # 2 楼答案

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

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

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

    替代方法

    取不带空格的inputstring长度,并将其除以空格数+1(等于字数)

  3. # 3 楼答案

    在不太分解代码的情况下,可以通过counts[]数组运行for循环,将所有值相加,然后除以counts.length得到平均值

    但是要注意类型转换。您可能希望执行双除法而不是整数

  4. # 4 楼答案

     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. # 5 楼答案

    一些可能对你有帮助的建议(与具体问题无关)

    1. 选择一个有意义的类名,而不是While_Loop
    2. 在循环开始之前执行Scanner input = new Scanner(System.in);
    3. 阅读每一行内容后,请执行以下操作
    4. 使用"\\s+"拆分行
    5. 创建一个HashMap,其中Key作为Count(Integer),Value作为具有该计数的单词列表。在循环之外创建此
    6. 对于每个拆分单词,获取长度。并检查地图是否已经包含计数,获取列表(值),将当前单词添加到其中。否则,添加一个新条目,并将该单词作为列表中的单个条目
    7. 获取映射的keySet,添加所有键的值,即*count*列表中的元素数*。然后除以元素总数
    8. 是的,我知道这是一个非常大的变化(你最好忽略这一点)。但这是正确的选择
  6. # 6 楼答案

    平均而言,我假设您指的是平均长度。我还假设您想要得到一个浮点平均值。在这种情况下,只需将strings中所有长度的总和除以数组本身的长度即可

    您可以执行以下操作:

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

    我希望这有帮助