有 Java 编程相关的问题?

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

如何在java中从双数组创建字符数组?

我有一个双数组,其中包含表示期中成绩的值,我需要创建一个具有相同值的字符数组,但我需要它来显示字母成绩。例如,我需要从{89.6,73.9,96.9}到{B,C,A}。以下是我目前的代码:

int numStudents = 60; int studNum = 1; double[] midtermGrades = new double[numStudents]; Scanner grades = new Scanner(System.in); System.out.println("Here are the scores for the most recent test taken by your class:"); for (int i = 0; i < midtermGrades.length; i++) { midtermGrades[i] = (60 + (double)(Math.random() * 40)); System.out.printf("Student " + studNum++ + " : " + "%.1f\n", midtermGrades[i]); } double total = 0; for (int i = 0; i < midtermGrades.length; i++) { total += midtermGrades[i]; } double studAvg = (total / midtermGrades.length); System.out.printf("The average grade for your class was " + "%.1f\n", studAvg); int aboveAvg = 0; for (int i = 0; i < midtermGrades.length; i++) { if (midtermGrades[i] > studAvg) { aboveAvg++; } } System.out.println("There are " + aboveAvg + " students in your class who scored above the average.\n"); char[] letterGrades = new char[midtermGrades.length]; for (int i = 0; i < midtermGrades.length; i++) { letterGrades[i] = (char)midtermGrades[i]; } }

共 (5) 个答案

  1. # 1 楼答案

    另一种方法是使用ASCII表。例如,96.9的第10位是9,字符AJ的十进制值分别是6574。因此,您可以用9减去74,得到字符A的相应十进制值。下面的代码片段显示了如何将double数组转换为预期的char数组:

    代码片段

    double[] midtermGrades = {89.6, 73.9, 96.9};
    char[] letterGrades = new char[midtermGrades.length];
    for (int i = 0; i < midtermGrades.length; i++) {
        if (midtermGrades[i] < 60) {
            letterGrades[i] = 'E';
        } else if (midtermGrades[i] >= 90) {
            letterGrades[i] = 'A';
        } else {
            letterGrades[i] = ((char)('J' - (int)midtermGrades[i]/10));
        }
    }
    System.out.println(Arrays.toString(letterGrades));
    

    控制台输出

    [B, C, A]

  2. # 2 楼答案

    您可以尝试使用不同的字符数组,并指定分级标准

    char midtermgrades2 = new char[numStudents] ;
    for(i=0;i<midtermgrades.length;i++)
    {If(midtermsgrades[i]<100 && midtermsgrades[i]>80) 
    Midtermgrades2[i]='A';
    else 
    //specify more conditions like this
    }
    
  3. # 3 楼答案

    如果第三方库是一种选择,而装箱带来的开销可以忽略,那么最简单、最干净的解决方案就是使用com。谷歌。常见的收集来自guava的范围图

        final RangeMap<Double, String> grades = ImmutableRangeMap.<Double, String> builder()//
        .put(Range.closed(90D, 100D), "A")//
        .put(Range.closedOpen(80D, 90D), "B")//
        .put(Range.closedOpen(70D, 80D), "C")//
        //so on
        .build();
    
    System.err.println("99.9 -> " + grades.get(99.9));
    System.err.println("77.8 -> " + grades.get(77.8));
    

    这将产生以下结果:

    99.9 -> A 
    77.8 -> C
    

    你需要注意的唯一一件事是范围不要重叠

  4. # 4 楼答案

    你的第一个问题是制作一个有意义的字符

    数学。random()只生成0到1之间的十进制数。 问题是数学。random()是一种基本的数据类型,是一个双精度的静态数据类型,此外,字符的编号是与代码页语言字符集符号相对应的“整数”,例如字符集ISO_1152是ASCII,并且定义了少于100个与整数相对应的符号

    Java默认的英语字符集是IS0_8859-1,包含类似于UTF-8的符号,从0整数到255整数不等

    如果是数学的结果。如果将random()四舍五入为一个整数值,则它的基础数值将是1或0

    double dblval = (double)Math.random(); // (double) syntax casts the "static" context out to a normal value
        int primaryconv = new Double(dblval).intValue(); // causes numeric rounding('narrowing' in the API docs) to an int
        char[] myconversion = new String((new Integer(primaryconv).toString())).toCharArray(); // calls toCharArray() on String object inside default encoding
    

    不要使用整数,而是使用 数学可以使用round(double)并返回“long”而不是int

    double dblval = (double)Math.random(); // (double) syntax casts the "static" out (removes static context) to a normal value
    String primaryconv = new Long((long)Math.round(dblval)).toString(); // note the EXTRA running cast to "long' to remove 'static' context
    char[] myconversion = primaryconv.toCharArray(); // calls toCharArray() on String object inside default encoding
    
  5. # 5 楼答案

    首先,你必须有一个基于分数的等级映射。在下面的例子中,我有如下映射:

    • 马克>;90-A年级
    • 80&;90-B级
    • 70&;80-C级等等
    char[] letterGrades = new char[midtermGrades.length];
    for (int i = 0; i < midtermGrades.length; i++) {
         letterGrades[i] = (char)midtermGrades[i];
    }
    

    您应该用以下代码替换代码中的上述块

    char[] letterGrades = new char[midtermGrades.length];
    for (int i = 0; i < midtermGrades.length; i++) {
            if (midtermGrades[i] >= 90) {
                letterGrades[i] = 'A';
            } else if (midtermGrades[i] >=80) {
                letterGrades[i] = 'B';
            } else if (midtermGrades[i] >=70) {
                letterGrades[i] = 'C';
            } else if (midtermGrades[i] >=60) {
                letterGrades[i] = 'D';
            } else if (midtermGrades[i] >=50) {
                letterGrades[i] = 'E';
            } else {
                letterGrades[i] = '-';
            }
    }
    

    希望,这将帮助你:)