如何从String中分隔数字

时间:2014-08-13 20:08:08

标签: java

我必须仅使用for循环和if语句,String和Character方法(没有String Builder)来执行以下操作:

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

给出的例子是:

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

Maria的成绩是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)

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

你一次只能从字符串中获得2个字符。 1和3个字符数字打破了代码。这样做:

String[] grades = input.nextLine().split(" ");

for(int i = 0; i < grades.length; i++)
{
    int number = Integer.parseInt(grades[i]);
    sum += number;
    gpa = (double)sum / (double)total;              
}   

答案 2 :(得分:1)

我有相同的教科书,这就是我练习练习的方法,它练习了Smith_61提到的技巧。 [这是我的第一篇文章,所以请告诉我它是否有用并且格式正确,4个空间让我感到困惑了一段时间]。

import java.util.Scanner;
public class C4E8
{
    public static void main(String[] args)
    {
        Scanner console = new Scanner(System.in);
        printGPA(console);
    }
    public static void printGPA(Scanner input)
    {
        int total = 0;
        System.out.print("Enter a student record? ");
        String name = input.next();
        int n = input.nextInt();
        for (int i = 1; i <= n; i++)
        {
            total += input.nextInt();
        }
        double gpa = (double) total / n;
        System.out.println(name + "'s grade is " + gpa);
    }
}

答案 3 :(得分:0)

你可以做到以下几点。之后,String grades = input.nextLine();

Scanner gradeScanner = new Scanner(grades);

int sum = 0;

int numOfGrades = 0;

while(gradeScanner.hasNextInt()){
    sum += gradeScanner.nextInt();
    numOfGrades++;
}

double avg = sum / numOfGrades;

当然,您必须删除阅读数字的方式

注意:我假设您输入的成绩如此12 20 15 16等。我使用" "作为分隔符。

希望这有帮助

答案 4 :(得分:0)

我不确定您使用字符串grades的原因。您应该使用nextInt()的循环,直到没有其他成绩。例如:

System.out.print("Enter a student record: ");
String name = input.next();
int totalGrades = 0;
int total = input.nextInt();
while (input.hasNextInt()) {
    totalGrades += input.nextInt();
}
double gpa = totalGrades/total;

System.out.println("Student record: " + name + " " + total + " " +
        grades);
System.out.println(name + "'s grade is " + gpa);

这假设输入始终为Name NumOfGrades Grade Grade Grade // etc. for as many grades as needed

您使用扫描仪获取名称,而不是创建所有等级的累积值,同时计算等级数。然后,通过简单划分,您可以找到GPA。您可以像以前一样打印出相同的方式。