c语言你不要过来啊 2022-05-24 13:47 采纳率: 60%
浏览 66
已结题

Java图书借阅系统

我们想为图书馆的图书借阅系统创建一个命令行界面(CLI)。

添加一个带有main方法的CLI类。这样你的代码就有了两个带有main方法的类:Test类,你可以用它来运
行你所有类的所有测试;CLI类,你现在要用它来运行你的程序的基于文本的交互式界面。

CLI类没有任何testCLI方法,因为这个类只是用来让用户交互式地使用系统。

在CLI类中添加一个私有的静态input实例变量,它是一个Scanner对象,从标准输入流System.in中读取
输入。
私人静态扫描器输入 = 新的扫描器(System.in)。

当你需要读取输入时,总是使用这个输入扫描器对象。(千万不要关闭这个扫描器对象,因为这也会关闭标准
输 入 流 System.in , 然 后 当 你 下 次 试 图 从 标 准 输 入 流 中 读 取 东 西 时 , 你 会 得 到 一 个
NoSuchElementException!)
除了主方法和输入实例变量外,CLI类还有两个方法,叫做
readLine和readPosInt。

readLine方法是静态和私有的,它接收一个字符串作为参数,并返回另一个字符串作为结果。该方法
readPosInt方法是静态和私有的,它接受一个字符串作为参数,并返回一个正整数作为结果。

readLine方法使用System.out.print(而不是println)在屏幕上打印其字符串参数(以后我们使用
readLine方法时,该方法的字符串参数将是告诉用户输入一些文本的信息)。然后,readLine方法使用输
入扫描器对象从程序的用户那里读取一整行的文本,并将文本作为结果返回。

readPosInt方法使用System.out.print(不是println)在屏幕上打印其字符串参数(以后我们使用
readPosInt方法时,该方法的字符串参数将是一条告诉用户输入某个整数的信息)。然后,readPosInt方法
使用输入扫描器对象,从程序的用户那里读取一个整数。

在读取整数后,readPosInt方法还必须使用扫描器的nextLine方法来读取用户在输入整数后按下键盘上
的回车键所产生的单个换行符(如果你不使用readPosInt方法中的nextLine方法来读取这个换行符。那
么换行符将保留在输入流中,并且,当你下次使用上述readLine方法时,readLine方法将立即从输入流中
只读取换行符,并返回一个空字符串作为结果,而无需等待用户输入任何东西!)。)

如果用户输入的不是一个整数,那么扫描器的nextInt方法将抛出一个InputMismatchException。在这
种情况下,你的readPosInt方法的代码必须捕获这个异常,使用System.out.println向用户打印错误
信息 "你必须输入一个整数!"(使用
使用扫描器的 nextLine 方法读取(并忽略)程序用户输入的错误输入(如果不这样做,用户输入的错误输
入将保留在输入流中,下次再次调用 nextInt 方法时,将再次出现 InputMismatchException!),然后
再做一遍(包括再次打印readPosInt方法的字符串参数),尝试再次读取一个整数(提示:将整个方法的代码
放在一个while循环中)。
在读完整数和换行符后(换行符被忽略),readPosInt方法测试整数。如果整数大于或等于0 ,那么
readPosInt 方法就将整数作为结果返回。如果整数严格小于零,那么 readPosInt 方法使用
System.out.println 向 用 户 打 印 错 误 信 息 "Positive integers only!" ( 为 此 使 用
System.out.println,而不是 System.err.println,否则你可能会遇到 Eclipse 中的错误.),然后再
做一遍(包括再次打印 readPosInt 方法的字符串参数),尝试再次读取一个整数(提示:只需打印错误
信息,然后你已经围绕整个代码的 while 循环会自动再做一遍.)。

例如,如果你想检查你的两个方法readLine和readPosInt是否正常工作,把下面的代码放在你的CLI类的
主方法中。
public static void main(String[] args) {
String str1 = readLine("输入一些文本:");
System.out.println("读取的文本是:" + str1);
int i = readPosInt("输入一个整数:");
System.out.println("读取的整数是:" + i)。
String str2 = readLine("再次输入一些文本:");
System.out.println("读取的文本是:" + str2)。
}

那么运行CLI类的主方法应该是这样的(其中a b, c, d e, - 100, -200, 1234, 和f
g是用户在键盘上输入的信息)。
输入一些文本:a b 读
出的文本是:a b 输入一
个整数:c
你必须输入一个整数!输入一个整数:
d e 你必须输入一个整数!
输入一个整数: -100 仅限正整数!
输入一个整数:-200 仅限正
整数!输入一个整数: 1234 读
出的整数是: 1234
再次输入一些文字:f g 读出的文
字是:f g

  • 写回答

2条回答 默认 最新

  • 小飞LOVE霞 2022-05-24 16:08
    关注
    
    package csdn004;
    
    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    /**
     * @author wf
     */
    public class CLI {
        private static Scanner SCANNER = new Scanner(System.in);
        public static void main(String[] args) {
            String str1 = readLine("输入一些文本:");
            System.out.println("读取的文本是:" + str1);
            int i = readPosInt("输入一个整数:");
            System.out.println("读取的整数是:" + i);
            String str2 = readLine("再次输入一些文本:");
            System.out.println("读取的文本是:" + str2);
        }
    
        private static String readLine(String str) {
            System.out.print(str);
            String s = SCANNER.next();
            return s;
        }
    
        private static Integer readPosInt(String str) {
            boolean flag = true;
            while (flag) {
                try {
                    System.out.print(str);
                    Integer next = SCANNER.nextInt();
                    if (next < 0) {
                        System.out.println("Positive integers only!");
                        flag = true;
                    }
                    flag = false;
                    return next;
                }catch (InputMismatchException e) {
                    System.out.println(e.getMessage());
                }
    
            }
            return 0;
        }
    }
    
    class Test {
        public static void main(String[] args) {
    
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 5月24日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来