[英]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.