字符流问答小程序解题过程及拓展

60 篇文章 0 订阅
4 篇文章 0 订阅

题干:

(实践题)使用输入流读取试题文件,每次显示试题文件中的一道题目。读取到字符“*”时暂停读取,等待用户从键盘输入答案。用户做完全部题目后。程序给出用户的得分(10分一道题)。
1)    试题内容如下:


(1)英雄联盟S9全球总决赛是什么时间开幕的?
    A.2018-08-08  B. 2018-08-01 
    C.2019-10-01 D. 2019-10-02
********************
(2)下列哪个英雄不属于《英雄联盟》?
   A.卡特  B.盲僧 C.剑豪  D.后羿
********************
(3).以下哪一句不是疾风剑豪亚索的台词?
    A.死亡如风,常伴吾身。B.面对疾风吧!C.真正的大师,永远都怀着一颗学徒的心。D.哈塞给!
********************
(4).英雄联盟世界S赛被OMG基地50血翻盘的战队是?
    A.SKT B.Najin C.FNC D.G2
********************
(5)英雄联盟中,戏称最争气的英雄是?
    A迅捷斥候  B蒸汽机器人  C德玛西亚之力  D疾风剑豪
********************


-------》程序运行如下:
(1)英雄联盟S9全球总决赛是什么时间开幕的?
A.2018-08-08  B. 2018-08-01 
C.2019-10-01 D. 2019-10-02
输入选择的答案(A、B、C、D):D
(2)下列哪个英雄不属于《英雄联盟》?
   A.卡特  B.盲僧 C.剑豪  D.后羿
输入选择的答案(A、B、C、D):D
...
...

完成试题,恭喜你 你最后的得分为:20 分。

*/

先浅浅打印一下,控制台打印成功

加入判断语句,使其在出现*时暂停读取,输入答案,试运行一下

基本实现我们想要的效果,但是当我输出小写字母的答案时,找不到与之相匹配的值,所以即便我答案正确也不得分,所以可以写一个输出错误语句。

java中“==”的使用回顾:

因为在Java中,如果是基本数据类型,则 == 比较的是值;如果是对象类型,则 == 比较的是对象的地址。

   //基本数据类型   ==判断的是值
  String str1 = "hello";
  String str2 = "hello";
  System.out.println(str1 == str2);

基本数据类型,==判断的是值,结果为true.

//引用数据类型,==判断的是他们在内存中存放的地址
        String str1 = new String("hi");
		String str2 = new String("hi");
		System.out.println(str1 == str2);

引用数据类型,==判断的是他们在内存中存放的地址,结果为false。

之前的语句

/        用String来存储
        String line;
        while ((line = br.readLine()) != null) {
            br.lines();
            if (!line.startsWith("*")) {
                System.out.println(line);
            } else {
                System.out.println("输入选择的答案(A、B、C、D):");
                String choice = sc.next();
//                拼接输入答案
                result = sb.append(choice.charAt(0)).toString();
            }
        }

//        存储总得分
        int sum = 0;
        for (int i = 0; i < result.length(); i++) {
//            比较输入结果和答案
            if (result.charAt(i) == anser.charAt(i)) {
                sum += 10;
            }
        }
        System.out.println("完成试题,恭喜你 你最后的得分为:" + sum + "分。");

改进后:

//        用String来存储
        String line;
        while ((line = br.readLine()) != null) {
            br.lines();
            if (!line.startsWith("*")) {
                System.out.println(line);
            } else {
//                加入一个死循环,确保输错也能继续运行
                boolean flag = true;
                while (flag) {
                    System.out.println("输入选择的答案(A、B、C、D):");
                    String choice = sc.next();
//                    选择输入的内容与设置的答案相比较,都满足“不等于A/B/C/D”的条件
                    if (!choice.equals("A") && !choice.equals("B")  && !choice.equals("C")  && !choice.equals("D")) {
                        System.out.println("您输入的答案有误,请重新");
                    } else {
                        //                拼接输入答案
                        result = sb.append(choice.charAt(0)).toString();
                        flag = false;  //终止循环
                    }
                }
            }
        }

完整运行可得:

(1)英雄联盟S9全球总决赛是什么时间开幕的?
	A.2018-08-08  B. 2018-08-01 
	C.2019-10-01 D. 2019-10-02
输入选择的答案(A、B、C、D):
a
您输入的答案有误,请重新
输入选择的答案(A、B、C、D):
A
(2)下列哪个英雄不属于《英雄联盟》?
   A.卡特  B.盲僧 C.剑豪  D.后羿
输入选择的答案(A、B、C、D):
D
(3).以下哪一句不是疾风剑豪亚索的台词?
	A.死亡如风,常伴吾身。B.面对疾风吧!C.真正的大师,永远都怀着一颗学徒的心。D.哈塞给!
输入选择的答案(A、B、C、D):
C
(4).英雄联盟世界S赛被OMG基地50血翻盘的战队是?
	A.SKT B.Najin C.FNC D.G2
输入选择的答案(A、B、C、D):
B
(5)英雄联盟中,戏称最争气的英雄是?
	A迅捷斥候  B蒸汽机器人  C德玛西亚之力  D疾风剑豪
输入选择的答案(A、B、C、D):
D
完成试题,恭喜你 你最后的得分为:30分。

进程已结束,退出代码 0

完整代码如下:

package com.B.IOStream_14.CharDemo03.Ask;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

//(实践题)使用输入流读取试题文件,每次显示试题文件中的一道题目。
// 读取到字符“*”时暂停读取,等待用户从键盘输入答案。用户做完全部题目后。
// 程序给出用户的得分(10分一道题)。
public class A4 {
    public static void main(String[] args) throws IOException {
//        创建输入流对象
        BufferedReader br = new BufferedReader(new FileReader("Temp\\问答题.txt"));
//        BufferedWriter bw = new BufferedWriter(new FileWriter("Temp\\itDemo\\array1.txt"));
//       StringBuilder拼接输入答案
        StringBuilder sb = new StringBuilder();
//键盘输入
        Scanner sc = new Scanner(System.in);
//        设置答案
        String anser = "DDCCD";
//初始化选择
        String result = null;
//读取试题文件
//        char[] chs = new char[1024];
//        int len;
//while ((len= br.read(chs)) != -1){
//    System.out.println(new String(chs,0,len));
//}

//        用String来存储
        String line;
        while ((line = br.readLine()) != null) {
            br.lines();
            if (!line.startsWith("*")) {
                System.out.println(line);
            } else {
//                加入一个死循环,确保输错也能继续运行
                boolean flag = true;
                while (flag) {
                    System.out.println("输入选择的答案(A、B、C、D):");
                    String choice = sc.next();
//                    选择输入的内容与设置的答案相比较,都满足“不等于A/B/C/D”的条件
                    if (!choice.equals("A") && !choice.equals("B")  && !choice.equals("C")  && !choice.equals("D")) {
                        System.out.println("您输入的答案有误,请重新");
                    } else {
                        //                拼接输入答案
                        result = sb.append(choice.charAt(0)).toString();
                        flag = false;  //终止循环
                    }
                }
            }
        }

//        存储总得分
        int sum = 0;
        for (int i = 0; i < result.length(); i++) {
//            比较输入结果和答案
            if (result.charAt(i) == anser.charAt(i)) {
                sum += 10;
            }
        }
        System.out.println("完成试题,恭喜你 你最后的得分为:" + sum + "分。");

//释放资源
        br.close();

    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值