簡體   English   中英

如何將數字與字符串分開

[英]How to separate numbers from String

我只需要使用for循環以及if語句,String和Character方法(沒有String Builder)來執行以下操作:

“編寫一個稱為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,則需要將它們與字符串分開,然后將它們轉換為整數,以便添加它們。

如果輸入以上內容,則會收到以下錯誤:

線程“主”中的異常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而不是手動解析String。 這將處理可變長度的整數,而不是您的代碼僅處理兩位數字的地方。 這就是為什么它在0-9和100上失敗。

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

編輯:您可能還想添加錯誤處理,以檢測成績是否低於0或高於100,因為在這種情況下,這些沒有意義。

您一次只能從字符串中得到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;              
}   

我有同一本教科書,這就是我做練習的方式,它實現了Smith_61提到的技術。 [這是我的第一篇文章,所以請告訴我它是否有幫助並且格式正確,這四個空格使我感到困惑了一段時間]。

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);
    }
}

好,您可以執行以下操作。 之后, 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等。即使用" "作為分隔符。

希望這可以幫助

我不確定您為什么使用String 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輸入Name NumOfGrades Grade Grade Grade // etc. for as many grades as needed

使用掃描儀獲取名稱,而不是在計算多少個等級的同時創建所有等級的累積值。 然后,通過簡單的划分,您便會找到GPA。 您可以像以前一樣打印出完全相同的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM