-3

首先,当涉及到 java 时,我很新鲜。我的程序应该向用户询问字符串并打印他们刚刚输入的内容。然后应该将所有字符更改为小写并从字符串中删除所有空格并打印出来。在此之后,它应该打印一个字母的字符数组并使用星号 (*) 来显示字符串中每次出现一个字符(我什至不知道从哪里开始)。现在它只是在数组中打印字符串(不正确)。这就是我到目前为止所拥有的。它将打印不带空格的字符串或原始字符串,但不能同时打印两者。我的对象/数组命名很糟糕,我提前道歉。任何指导将不胜感激

编辑:这是问题在这个作业中,你要编写一个程序来执行以下操作:

  1. 要求用户输入一个正整数 m,然后读取该整数。使用在 main 中声明的 Scanner 对象来读取此整数。

  2. 调用一个要求用户输入 m 个字符串的方法。读取字符串时,应将它们连接成单个字符串 st。在读取 m 个字符串并形成单个字符串 st 后,该方法应返回 st。注意:此方法将有两个参数,一个用于接收 m 的 int 和一个用于接收 main 中声明的 Scanner 对象的 Scanner 对象。

  3. 在主打印中,从方法接收到的连接字符串。

  4. 在 main 中将 String 对象转换为小写。

  5. 在 main 中,将小写的 String 对象转换为 char 数组。(所有字母都是小写的。)

  6. 在主打印中,刚刚创建的字符数组。(需要循环结构。)

  7. 调用将按以下方式压缩字符数组的方法。该方法将对数组中的字母进行计数,创建一个大小等于该计数的新数组,然后仅将原始数组的字母复制到新数组中。返回新数组。

  8. 在 main 中声明一个大小为 26 的整数数组。调用一个带有两个参数的方法,一个字符数组 x(它将只包含小写字母,以及一个整数数组 z,它将接收在 main 中声明的那个)。该方法会将整数数组中的所有条目设置为零。然后它将处理小写字母数组并计算每个字母出现的次数。提示:z[x[i]-97]++ 可以进行计数。a 的 ASCII 码是 97,所以如果 x[i] 是 'a',那么 z[0] 将递增。'b' 会导致 z[1] 递增,等等。整数数组现在包含小写字母数组中字母的频率分布。

  9. 使用一个整数数组参数调用一个方法(它将接收频率分布数组),并在新行上打印每个字母,然后打印等于该数组元素中整数值的星数。这必须整齐地对齐。提示:如果 i 是 0 ≤ ≤ 25 的索引,则 (char)(i+97) 是字母表中的小写字母。

    package lab6;
    
    import java.util.Scanner;
    
    public class Lab6 {
    
        public char sent[];
    
    
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("enter the number of strings you want: ");
    int m = input.nextInt();
    Lab6 loo = new Lab6();
    loo.print(loo.loop(m));
    
    
    }
    
    public String loop(int m) { //print the string that was entered
    String total = " ";
    for (int i = 1; i <= m; i++) {
        Scanner input = new Scanner(System.in);
        System.out.println("enter string: " + i);
        String st = input.nextLine();
    
        total += st + "";
    
    }
    System.out.println(total);
    
    return total;
    
    }
    
    public void print(String ht) { //print array
    
    String st = ht.toLowerCase().replaceAll("\\s", "");
    sent = st.toCharArray();
    for (int i = 0; i < sent.length; i++) {
        System.out.println(sent[i]);
    
            }
        }
    }
    
4

1 回答 1

0

听起来计算机科学不是你的一杯茶。我强烈建议您重构此代码并尝试弄清楚它为什么会这样做。

public void print(String ht) { // print array

    String st = ht.toLowerCase().replaceAll("\\s", "");
    sent = st.toCharArray();

    int[] alphabet = new int[26];
    //set all values to 0
    for(int i = 0 ; i < alphabet.length ; i++){
        alphabet[i] = 0;
    }
    //Loop through all characters and increment corresponding value
    for(int i = 0 ; i < sent.length ; i++){
        alphabet[sent[i] - 97]++;
    }
    //Print character + asterisk for each time the character is used
    for(int i = 0 ; i < alphabet.length ; i++){
        System.out.print((char)(i + 97) + ": ");
        for(int nChars = 0 ; nChars < alphabet[i] ; nChars++){
            System.out.print("*");
        }
        System.out.println();
    }

}
于 2013-10-27T19:15:06.760 回答