Вычисление среднего, упражнение по токенизации строки - PullRequest
0 голосов
/ 19 мая 2018

Я пытался заставить эту программу работать в течение 3 дней.Я также исследовал различные веб-сайты и стекопоток, и у меня просто не было большого успеха.

Цель этой программы - получить пользовательский ввод, который может быть отделен любым количеством пустого пространства итакже одна точка с запятой.Затем будут добавлены целые числа и будет вычислено среднее значение.Однако хитрость в том, что дроби также могут быть реализованы и могут быть в следующих форматах: 12/33 или (12/33).

Фракции - это процентные оценки из 100.

Я был успешнов состоянии устранить пробелы и точки с запятой Я просто не уверен, как я могу сделать аспект вычисления этого кода, специально относящийся к дробям.

Это мой текущий код:

public static void main(String[] args) {
    System.out.println("Enter a Set of Grades:");
    Scanner messageIn = new Scanner(System.in);
    String store = new String();
    store = messageIn.nextLine();
    store = store.trim().replaceAll(" +", "");
    //store = store.trim().replaceAll("(", "");
    //store = store.trim().replaceAll(")", "");
    String[] dataSet = store.split(";");
    //messageIn.close();
    for (int i = 0; i<dataSet.length; i++) {
        System.out.println(dataSet[i]);
    }
}

Спасибоочень много за любую помощь

Я не дошел до этого, но, например, этот код будет моим вводом:

98; 37;12/33;(33/90);88;120/150;

Вывод будет:

Среднее значение: 62,67

1 Ответ

0 голосов
/ 19 мая 2018

Как насчет чего-то подобного, когда вы проверяете, содержит ли индивидуальная оценка a / и разбираете ли вы этот случай отдельно:

import java.util.Scanner;

class Main{
  public static void main(String[] args) {
    //Initialize scanner object
    Scanner scanner = new Scanner(System.in);

    //Prompt user for input
    System.out.print("Enter a Set of Grades:");
    String store = scanner.nextLine();

    //Remove all white space and round brackets
    store = store.replaceAll("[\\(\\)\\s+]","");

    //Split input into individual grades
    String[] grades = store.split(";");

    double sum = 0;
    //Loop over each entered grade and add to sum variable
    for (String grade : grades) {
      if(grade.contains("/")) {
        double numerator = Double.parseDouble(grade.split("/")[0]);
        double denominator = Double.parseDouble(grade.split("/")[1]);
        sum += numerator/denominator * 100;
      } else {
        sum += Double.parseDouble(grade);
      }
    }

    System.out.printf("The average is: %.2f\n", sum/grades.length);
  }
}

Пример использования:

Enter a Set of Grades: 98;37; 12/33; (33/90); 88; 120/150;
The average is: 62.67

Попробуйте это здесь!

...