java - 如何从字符串中分离数字

标签 java

我必须仅使用 for 循环和 if 语句、字符串和字符方法(无字符串生成器)执行以下操作:

“编写一个名为 printGPA 的方法,该方法接受控制台的扫描仪作为 参数并计算学生的平均绩点。用户将 键入一行包含学生姓名的输入,然后键入一个数字 代表分数的数量,后面跟有那么多整数分数。”

给出的例子是:

输入学生记录:Maria 5 72 91 84 89 78

玛丽亚的成绩是 82.8

我已经使用以下代码成功完成了此操作:

public class Exercise8 
{
    public static void main(String[] args)
    {
        Scanner consoleInput = new Scanner(System.in);
        printGPA(consoleInput);     
    }
    public static void printGPA(Scanner input)
    {
        System.out.print("Enter a student record: ");
        String name = input.next();
        int total = input.nextInt();
        String grades = input.nextLine();

        int sum = 0;        
        String stringConcat = "";
        double gpa = 0.0;

        System.out.println("Student record: " + name + " " + total + " " +
            grades);

        for(int i = 1; i < grades.length(); i++)
        {
            char ch = grades.charAt(i);
            char ch2 = grades.charAt(i + 1);                
            stringConcat = String.valueOf(ch) + String.valueOf(ch2);
            int number = Integer.parseInt(stringConcat);
            sum += number;
            gpa = (double)sum / (double)total;              
            i += 2;         
        }   
    System.out.println(name + "'s grade is " + gpa);
 }

}

只要我不在等式中输入 100 或 0,该程序就可以正常工作。我不知道如何创建一个算法来从字符串中删除 100 或 0,无论它们位于字符串中的位置。

编辑:

例如:如果我输入 72, 100, 98, 0, 87,我需要将它们从字符串中分离出来,并将它们转换为整数,以便我可以将它们相加。

如果我输入上述内容,我会收到以下错误:

线程“main”java.lang.NumberFormatException中出现异常:对于输入字符串:“9”

at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Chapter4.Exercise8.printGPA(Exercise8.java:37)
at Chapter4.Exercise8.main(Exercise8.java:16)

最佳答案

使用Scanner.nextInt而不是手动解析字符串。这将处理可变长度整数,而不是您的代码仅处理两位数字。这就是它在 0-9 和 100 上失败的原因。

for( int i = 0; i < total; i++ ) {
    gpa += scanner.nextInt();
}
gpa = gpa / total;

编辑:您可能还需要添加错误处理来检测成绩是否低于 0 或高于 100,因为这些在这种情况下没有意义。

关于java - 如何从字符串中分离数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25295194/

相关文章:

java - 如何在 Eclipse 中调试 "Errors occurred during the build"?

java - 是否有可能拥有 native android 代码?

java - 使用 LinkedList 与 HashMap 实现无向图有什么区别?遍历BFS/DFS哪个更好?

java - 每次更改时自动更新 jTextFields 的总和 (Java)

java - 使用 JDK 5 api 从 zip 文件中提取文件时保持文件权限

java - 允许 servlet 和客户端脚本读取同一个文件的最佳方法是什么?

java - 在 Eclipse JDT Java 解析器中,是否可以在不使用访问者的情况下逐个节点遍历 AST?

java - java 服务器上的缓存和内存处理

java - 使用 PDFBox 2.0.12 进行外部签名

java - PeriodAxis 不正确的时区