Есть ли способ, чтобы пользователь вводил свой ответ сразу после вопроса в этом массиве? - PullRequest
1 голос
/ 08 апреля 2020

Я новичок в java, и я должен что-то кодировать с помощью массивов и циклов, поэтому у меня 10 математических вопросов, на которые пользователь попытается ответить. Затем программа выводит количество вопросов, которые они получили правильно и неправильно, а также правильный процент. Для части l oop я планирую добавить игру позже. Это то, что у меня есть до сих пор ...

// variables
int correctAnswers = 0;
int incorrectAnswers = 0;
double percCorrect= 0;
final int numberOfQuestions = 10;
double userGuess1;
double userGuess2;
double userGuess3;
double userGuess4;
double userGuess5;
double userGuess6;
double userGuess7;
double userGuess8;
double userGuess9;
double userGuess10;

// intro
System.out.println("Enter your answer to the following math questions to test your knowledge!");
System.out.println();

// array for questions
String [ ] questions = new String [10]; // questions = name of array, holds 10 string values (questions)

// assigning questions
questions[0] = "Question 1: (4 – 5) – (13 – 18 + 2) = ?";
questions[1] = "Question 2: What number is next in this sequence: 31, 30, 22, 21, 13, 12, __";
questions[2] = "Question 3: Round 3.864 to the nearest tenth";
questions[3] = "Question 4: If 3x = 6x - 15, then x + 8 = ?";
questions[4] = "Question 5: The value of x + x(x^x) when x = 2 is ?";
questions[5] = "Question 6: 20% of 2 = ?";
questions[6] = "Question 7: What number is next in this sequence: 0, 1, 1, 2, 3, 5, 8, __";
questions[7] = "Question 8: Two sides of a right angled triangle are 3 and 4. The third side is ?";
questions[8] = "Question 9: What's the degree of 7x + 5 ?";
questions[9] = "Question 10: Solve for x: 5x + 2(x + 7) = 14x – 7";

// array for answers
double [ ] answers = {2, 4, 3.9, 13, 10, 0.4, 13, 5, 1, 3}; // answers = name of array, holds 10 double values (answers)

// outputting questions
for (int i = 0; i <= 9; i = i + 1)
{
    System.out.println(questions[i]); // outputting questions, eg when i = 0, system outputs questions[0]
} // end of for loop

// user inputs their answers
System.out.println();
System.out.print("Input your answer for Question 1: ");
userGuess1 = keyedInput.nextDouble();

System.out.print("Input your answer for Question 2: ");
userGuess2 = keyedInput.nextDouble();

System.out.print("Input your answer for Question 3: ");
userGuess3 = keyedInput.nextDouble();

Это продолжается до вопроса 10, но я хотел знать, есть ли способ, с помощью которого пользователь может ввести свой ответ сразу после того, как напечатан каждый вопрос. Это будет выглядеть так:

// Question
// User's guess

// Next question
// User's guess

В конце 10 вопросов программа выдаст результаты, и у меня будет, если утверждения, чтобы проверить, являются ли они правильными для каждого вопроса и рассчитать правильный процент и т. Д. на.

Я не знаю, как go о проверке ответа пользователя по отношению к правильному ответу и подсчете правильных ответов, неправильных ответов и вычислении среднего значения таким образом, что это менее утомительно, чем то, что я имел до сих пор. Я хочу проследить вопрос, предположение пользователя, вопрос, формат предположения пользователя, потому что я чувствую, что это будет проще. Как я уже сказал, я только что начал java, поэтому любая помощь или советы будут оценены. Пожалуйста, дайте мне знать, если есть что-то еще, что я должен исправить. Спасибо!

1 Ответ

2 голосов
/ 08 апреля 2020

Вы можете просто сделать то же самое для ответов (добавив их в массив), что и для вопросов и, следовательно, объединить их, например:

//...
double userGuess[]= new double[10];
//...

for (int i = 0; i <= 9; i = i + 1)
{
    System.out.println(questions[i]); // outputting questions, eg when i = 0, system outputs questions[0]
    System.out.print("Input your answer for Question "+(i+1)+":");
    userGuess[i] = keyedInput.nextDouble();

} // end of for loop

Однако, если вы планируете проверить, если удвоения от userGuess равны удвоениям из ответов, я бы посоветовал на самом деле использовать Strings, а не удваивать, так как удвоения могут иметь ошибки с плавающей запятой, и вам не нужна неточность. Кроме того, чтобы в процентной части можно было получить промежуточные значения (поскольку / между двумя целыми числами есть целочисленное деление, возвращающее частное!), Умножьте один из элементов, разделенных на 1,0, перед делением, чтобы превратить его в число с плавающей точкой. и, следовательно, получить нормальное деление, которое возвращает с плавающей запятой.

...
String userGuess[]= new String[10];
...

// array for answers
String [ ] answers = {"2", "4", "3.9", "13", "10", "0.4", "13", "5", "1", "3"}; // answers = name of array, holds 10 double values (answers)

// outputting questions
for (int i = 0; i <= 9; i = i + 1)
{
    System.out.println(questions[i]); // outputting questions, eg when i = 0, system outputs questions[0]
    System.out.print("Input your answer for Question "+(i+1)+":");
    userGuess[i] = keyedInput.nextLine();
    if(userGuess[i].equals(answers[i]))
      correctAnswers++;
    else
      incorrectAnswers++;

} // end of for loop
percCorrect=(correctAnswers*1.0/numberOfQuestions)*100;
System.out.println(percCorrect);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...