【问题标题】:Using array of char from another method to count occurances - char can't be converted to char[] -使用另一种方法中的 char 数组来计算出现次数 - char 无法转换为 char[] -
【发布时间】:2025-11-28 02:00:02
【问题描述】:

请善待我,因为我对 Java(以及一般编程)非常陌生。

我正在尝试编写一种计算成绩出现的方法,我想我已经弄清楚了,但是我在尝试测试它时失去了理智(i TestingPage)我收到错误'char can't转换为 char[]' 带有成绩的方法(getGrades),根据成绩(marks)的高低将int转换为char。

我确定解决方案很简单,但我似乎无法弄清楚我做错了什么,或者我需要包含或取出什么来测试它。

public class ProcessMarks {
    Marks testMarks = new Marks(); 
    int[] marks = testMarks.getMarks();

    //Method to create a new array of grades based on marks array
    public static char getGrades(int marks[]){
        int a = 90;
        int b = 75;
        int c = 60;
        int d = 50;
        int e = 45;
        char[] grades = new char [marks.length];
        char gradedMarks = grades[0]
        //else is F for fail! 
        for (int i = 0; i < marks.length; i++){
            if (marks[i] >= a)
                grades[i] = 'A';
            else if (marks[i] >= b && marks[i] < a)
                grades[i] = 'B';
            else if (marks[i] >= c && marks[i] < b)
                grades[i] = 'C';
            else if (marks[i] >= d && marks[i] < c)
                grades[i] = 'D';
            else if (marks[i] >= e && marks[i] < d)
                grades[i] = 'B';
            else 
                grades[i] = 'F';
        }
        for (int n = 0; n < grades.length; n++) {
            System.out.print(grades[n] + " ");
            if (n % 10 == 9)
                System.out.println();
        }

            return gradedMarks;
              
            }
    
    //Method to establish total occurrences of each grade
    public static char gradesDistn (char getGrades[]){
      char[] grades = getGrades;
      char gradesDistn = 0;

         int a = 0;
         int b = 0;
         int c = 0;
         int d = 0;
         int e = 0;
         int f = 0;

         for (int i = 0; i < grades.length; i++){
             if (grades[i] == 'A')
                 a++;
             else if (grades[i] == 'B')
                 b++;
             else if (grades[i] == 'C')
                 c++;
             else if (grades[i] == 'C')
                 c++;
             else if (grades[i] == 'D')
                 d++;
             else if (grades[i] == 'E')
                 e++;
             else
                 f++;
         }
         System.out.println("A: " + a);
         System.out.println("B: " + b);
         System.out.println("C: " + c);
         System.out.println("D: " + d);
         System.out.println("E: " + e);
         System.out.println("F: " + f);
         
         return gradesDistn;
         }
     }


public class TestingPage {
    public static void main(String[] args) {
        int[] marks = Marks.getMarks(); 
        char[] grade = ProcessMarks.getGrades(marks); // char cannot be converted to char[] 
        
      
        int median = ProcessMarks.getMedian(marks);
        int min = ProcessMarks.getMin(marks);
        int range = ProcessMarks.getRange(marks);
        int mean = ProcessMarks.getMean(marks);
        int mode = ProcessMarks.getMode(marks);
        char grades = ProcessMarks.getGrades(marks);
        int distribution = ProcessMarks.gradesDistn(grade);
        
        System.out.println(range);
        
       
           }
     
}

【问题讨论】:

  • 第一次调用 getGrades() 时,您期望返回类型为 char[]。您将获得从您指定的被调用方法返回的char。那就是您的类型不匹配的地方。您确定不想在您的getGrades() 方法中返回grades 而不是gradedMarks(实际上从未更改过)吗?
  • 我猜这就是我想要做的,但是我刚刚将返回值分配为 0,因为我不知道如何返回数组 Grades[]。当我在 main 方法中打印 getGrades 时,它会起作用并且打印等级数组,而不是返回语句的 0 值。我刚刚更新到这个。 chargradedMarks = 成绩[0];

标签: java arrays char


【解决方案1】:

Jandie,正如离线讨论的那样 - 您需要将类型定义为数组。上述答案应被接受,因为它们是正确的。

public static char getGrades(int marks[]){

变成

public static char[] getGrades(int marks[]){

【讨论】:

    【解决方案2】:

    在你的主要方法中:

    char[] grade = ProcessMarks.getGrades(marks); 
    

    getGrades() 返回char,但您将其分配给字符数组char[],这是不兼容的,甚至不能隐式转换。

    一般来说,请记住,T 类型和 T[] 类型是完全不同的类型。

    【讨论】:

    • 谢谢!我仍然很困惑,因为我认为 getGrades(marks) 是一个数组,因为我使用过 int[] marks = testMarks.getMarks();更多。类似于我使用 int[] 标记 = Marks.getMarks();获取标记数组。
    • 您还没有提供getMarks() 方法,但在这里它的作用并不重要。您的问题是关于 char 不能分配给 char[]。您的语句 char[] grade = ProcessMarks.getGrades(marks); 声明了一个 char 数组类型的变量,但随后将 getGrades 返回的内容分配给它,即 char 而不是字符数组。
    • 好的,谢谢。所以我需要弄清楚如何让 getGrades 方法返回一个 char[] 而不是 char。我以为我已经这样做了,因为它在测试时会打印整个数组。我不应该假设因为该方法返回正确的输出,并不意味着返回值是正确的类型。多么混乱!! :)
    • 不一定。这取决于您希望如何实现它。也许你想让它返回它返回的任何东西?这取决于您和您的实施。请记住,无论您的方法返回什么 都是您尝试分配给另一种类型的值。至少,类型应该是兼容的。
    【解决方案3】:

    在您的TestingPagevoid main 方法中,您正在这样做:

    char[] grade = ProcessMarks.getGrades(marks);
    

    这意味着您期望得到char[] 作为回报,但getGrades 方法只返回char,如下所示:

    public static char getGrades(int marks[]) { }
    

    方法将返回什么数据类型,您需要以完全相同的数据类型捕获响应。

    如果您执行以下操作,您的错误 [char 无法转换为 char[]] 会:

    char grade = ProcessMarks.getGrades(marks); 
    

    但我也看到了你的方法中的许多其他缺陷。

    示例:就像 getGrades() 返回的gradedMarks 一样,除了声明点之外永远不会填充。它总是返回相同的值。

    【讨论】:

    • 感谢您抽出宝贵时间提供帮助!也许我应该更具体一点。我正在尝试测试 gradeDistn 是 int distribution = ProcessMarks.gradesDistn(grade);但是我需要使用我在gradeDistn的getGrades中创建的数组。
    • 哦,我也对需要返回的内容有点困惑,您的评论已经了解了这一点。我必须有一个返回语句才能让方法正常工作,但是在 getGrades 中,返回值似乎没有做任何事情,我得到了适当的结果。我应该把我的 return 语句放在每个循环中吗?我的大多数其他方法都有特定的奇异值要返回,所以它们都有意义,但不是这个。
    最近更新 更多