We just saw that because of Polymorphism, one can write a program that can
handle any mix of quiz questions. Let's try that out and develop another
question type. A numeric question expects an answer from the user that is a
number. For example here we ask what is the area of a circle with radius one.
And the answer is of course pi, but that might be hard to enter, and we can't
really expect the user to type in the exact value of pi, and as you know, this
is not even the exact value, either. It goes on forever. We just want the user
to be able to enter, say, 3.14 or 3.14159, depending on how well they remember
those digits. Either one of those answers should be fine. In fact, we'll take
any answer, that's up to point oh one away, from the answer, that the user
provides. In a different numeric question we might use a different tolerance.
Your task is to implement this new question type. We've given you the
constructor, your job is to provide the set answer method. And the check answer
method. And the check answer method, you need to take the tolerance into
account, you need to check whether the given number is not too far away from
the response. So, technical issue the response is a a string, you need to convert
it to a number. And we show you here how to do that. You may need additional
instance variables. And then you should put them here. Go ahead, give this a
try.
Acabamos de ver que debido al Polimorfismo, podemos escribir un programa que
maneje cualquier combinación de preguntas de trivia. Vamos a intentarlo y a desarrollar otro
tipo de Pregunta. Una PreguntaNumérica espera una respuesta del usuario que sea un
número. Por ejemplo, aquí preguntamos cuál es el área de un círculo con un radio de uno.
Y la respuesta es, por supuesto, pi, pero eso podría ser difícil de entrar, y no podemos
esperar en verdad que el usuario escriba en el valor exacto de pi, y como ustedes saben, este
no es ni siquiera un valor exacto tampoco. Es un valor infinito. Sólo queremos que el usuario
pueda ingresar, por ejemplo, 3.14 o 3.14159, dependiendo de lo bien que recuerde
esos dígitos. Cualquiera de esas respuestas deben estar bien. De hecho, vamos a tomar
cualquier respuesta que llegue hasta 0.01 de distancia de la respuesta que el usuario
proporciona. En una pregunta numérica diferente podríamos utilizar una tolerancia diferente.
Tu tarea es poner en práctica este nuevo tipo de Pregunta. Te hemos dado el
constructor, tu trabajo es proporcionar el método setAnswer (definirRespuesta) y el método
checkAnswer (checarRespuesta). Y en el método checkAnswer debes tomar en cuenta la
tolerancia, debes comprobar si el número dado no es muy lejano a
la respuesta. Así que, técnicamente la respuesta es una cadena y es necesario que la conviertas
en un número. Y te mostramos aquí cómo hacerlo. Es posible que necesites variables de
instancia adicionales. Y entonces debes ponerlas aquí. Adelante, intenta
esto.
Nous venons de voir qu'à cause
du polymorphisme,
on peut écrire un programme
capable de gérer
n'importe quel ensemble
de questions quiz.
Essayons cela et développons
un autre type de question.
Une question numérique attend une réponse
de l'utilisateur sous la forme d'un nombre.
Par exemple, nous demandons ici
la surface d'un cercle avec un rayon de 1.
Et la réponse est bien sûr pi, mais
cela peut être difficile à saisir,
un utilisateur peut difficilement
taper la valeur exacte de pi,
un plus ce n'est même
pas la valeur exacte,
elle continue indéfiniment.
Nous voulons que l'utilisateur
puisse entrer, disons, 3.14
ou 3.14159,
dans la mesure où il se
souvient de ces chiffres.
Une de ces réponses devrait être bonne.
En fait, nous prendrons n'importe
quelle réponse, jusqu'à 0.01,
de la réponse, que l'utilisateur fournit.
Dans une question
numérique différente,
nous pourrions utiliser
une tolérance différente.
Votre tâche consiste à implémenter
ce nouveau type de question.
Nous avons fourni
le constructeur,
votre travail consiste à fournir
la méthode setAnswer
et la méthode checkAnswer.
La méthode checkAnswer,
vous devez prendre en compte la tolérance,
vous devez vérifier si le nombre donné
n'est pas trop éloigné de la réponse.
Techniquement, la réponse est une chaîne,
vous devez le convertir en nombre.
Et nous vous montrons comment faire.
Il vous faudra des variables
d'instance supplémentaires.
Alors vous devriez les mettre ici.
Allez-y, essayez-le.
ポリモーフィズムでいろいろなクイズ問題の
組み合わせに対応するプログラムが書けました
別のQuestion型を作りましょう
NumericQuestionクラスはユーザに
数値を答えてもらいます
例えば半径1の円の面積はいくつかを尋ねます
答えはもちろんπですが入力は難しいでしょう
ユーザが正確なπの値を入力するのは不可能です
ご存じのとおりこの値すら正確ではありません
永遠に数字が続くからです
ユーザが覚えている桁によって
例えば3.14もしくは3.14159などと
入力すれば大丈夫です
どちらの答えも正解です つまり正確な値から
±0.01の範囲であればユーザの答えは正解です
他のNumericQuestionクラスでは
これとは異なる許容範囲が設定できます
次にこの新しいQuestion型を実装しましょう
コンストラクタは
用意したのでsetAnswerとcheckAnswerの
メソッドを実装してください
checkAnswerメソッドは許容範囲を考慮すべきです
与えられた数値がパラメータresponseより
離れすぎていないかを調べます
厳密に言うとパラメータresponseは文字列なので
数値に変換しますがその方法がこれです
インスタンス変数の追加も必要でしょう
それはここに入れてください
では実装してみましょう
다형성에 의해서 여러 종류의 퀴즈 질문들을 다룰 수 있는 프로그램을
작성했습니다. 이를 위해 다른 질문의 종류를 만들어 봅시다.
NumericQuestion은 사용자에게 답을 숫자로 받습니다.
예를 들어서, 반지름이 1인 원의 넓이를 구하는 문제입니다.
이 질문의 답은 PI이지만 이는 입력하기 어렵습니다. 그리고
사용자가 PI의 정확한 값을 넣을 일이 없습니다. 여러분이 알듯이,
이것은 정확한 값이 아닙니다. 왜냐하면 무리수이기 때문이죠. 우리는
사용자가 3.14나 3.14159만 입력하길 원합니다.
이 둘의 답 중 아무거나 다 괜찮습니다. 0.01을
차이로 해서 사용자가 근사치에 있으면 답으로 하기로
했습니다. 다른 수학 문제를 풀 때는 다른 조건을 걸어야겠죠.
여러분은 이 새로운 질문의 유형을 구현해야 합니다. 여러분에게
생성자를 주었고, 여러분은 setAnswer 메소드와 checkAnswer
메소드를 구현하는 겁니다. checkAnswer 메소드에서, 여러분은
조건을 잘 설정해야 합니다. 답이 사용자의 입력과 너무 멀지 않은지
확인해야 합니다. 그래서 문제는 응답이 문자열이라는 겁니다. 문자열을
숫자로 변환해야 합니다. 여러분에게 이를 어떻게 하는지 보여줍니다. 여러분은
추가적인 인스턴스 변수가 필요할 수 있습니다. 여기에 선언을 하고
여러분이 하실 차례입니다.
Ta đã thấy rằng với Polymorphism, người ta có thể viết một chương trình,
có thể xử lý bất kỳ sự kết hợp của các câu hỏi nào. Hãy thử nó và tạo một kiểu câu hỏi khác.
Một numeric question sẽ cần một câu trả lời từ người dùng
là một con số. Ví dụ, ở đây ta hỏi rằng diện tích của hình tròn với bán kính là 1.
Và câu trả lời là pi, nhưng như thế có thể hơi khó để viếtm
và ta không thể muốn người dùng nhập chính xác giá trị của pi được, và như bạn biết,
đây cũng không phải giá trị chính xác. Nó sẽ đi tiếp mãi mãi. Ta chỉ cần người dùng
điền vào, ví dụ 3.14 hay 3.14159, phụ thuộc vào họ nhớ tới đâu.
Một trong các câu trả lời trên đều được. Thực tế là,
ta sẽ dùng bất kỳ câu trả lời nào, mà nó sẽ chỉ tới một hướng, với câu trả lời, mà người dùng cung cấp.
Với các numeric question khác nhau, ta sẽ sử dụng các sai số khác nhau.
Nhiệm vụ của bạn là thêm kiểu question mới này. Tôi đã cho bạn constructor,
việc của bạn là cung cấp setAnswer method. Và checkAnswer method.
Và checkAnswer method, bạn cần phải dùng tolerance (sai số)
để tính, bạn cần kiểm tra xem số đã cho có cách xa quá với số của người dùng không.
Và, số mà người dùng nhập là chuỗi, bạn cần phải convert nó
sang number. Và tôi cho bạn xem cách làm nó. Bạn có thể cần thêm một instance variables.
Và sau đó bạn sẽ cho nó vào đây. Tiếp tục,
và thử đi.