解析输入,除了 System.in.read() 之外不使用任何东西

2024-05-20

我很难找到具体的细节System.in.read();有效,也许有人可以帮助我。似乎扫描仪会更好,但我不允许使用它。

我被分配了一个任务,我应该以 Boolean-Operator-Boolean 的形式读取控制台用户输入,例如T^F 或 T&T 通过System.in.read()并简单地打印语句返回的内容。

普通人可能会使用不同的方法,但作业明确指出,只有System.in.read() and System.out.println()被允许。

这是我解决这个问题的尝试:

import java.io.*;

public static void main(String[] args) {

  String error = "Reading error, please use T or F";

  boolean a = true;  //char: 84 or 116 for T and t
  boolean b = false; //char: 70 or 102 for F and f
  int userChar1;
  int userOperator;
  int userChar2;
  int chosenOperator = 0;

  try {

    //Get first char
    System.out.println("Enter the first value (T or F):");
    userChar1 = System.in.read();

    if((userChar1==84)||(userChar1==116)) { // T or t
      a = true;
    } else if ((userChar1==70)||(userChar1==102)) { // F or f
      a = false;
    } else {
      System.out.println(error);
    }


    //Get second char
    System.out.println("Select an operator:  &  |  ^");
    userOperator = System.in.read();

    if(userOperator==38) { // &
      chosenOperator = 0;
    } else if (userOperator==124) { // |
      chosenOperator = 1;
    } else if (userOperator==94) { // ^
      chosenOperator = 2;
    } else {
      System.out.println(error);
    }


    //Get third char 
    System.out.println("Enter the second value:");
    userChar2 = System.in.read();
    System.in.close();
    if((userChar2==84)||(userChar2==116)) {
      b = true;
    } else if ((userChar2==70)||(userChar2==102)) {
      b = false;
    } else {
      System.out.println(error);
    }


    //Figure out result
    boolean result;
    switch (chosenOperator) {
    case 0:
      result = a&b;   
    case 1:
      result = a|b;
    case 2:
      result = a^b;

      System.out.println(result);

    }

  } catch(IOException e) {

  }
}

执行此代码使控制台在第一个输入之后等待用户输入System.in.read()并让它正确检查字符输入。然而在那之后,一切都成功了System.in.read()被忽略并且程序终止。

我找到了一段代码,使用了System.in.close(),所以仍然不知道我在每次之后将其拼接在什么方法中System.in.read()。这会导致程序在第一次执行时终止System.in.read()之后System.in.close()叫做。

那么,究竟发生了什么?你会如何使用System.in.read()正确吗?


问题不在于 System.in.read(),而在于控制台。 控制台通常是缓冲的,这意味着只有在按下回车键后数据才会发送到您的程序(因此可由 System.in.read() 读取)。 因此,您必须将控制台切换到无缓冲模式,但没有可移植的方法来执行此操作,因为有很多不同类型的控制台(unix shell、cmd 窗口、Eclipse 控制台等)。
如果不允许使用除 System.in.read() 和 System.out.println() 之外的任何方法,则必须让用户在一行中输入完整的术语,按 Enter 键,然后才能处理字符输入,例如:

public static void main(String[] args) throws IOException {
    boolean a = true; // char: 84 or 116 for T and t
    boolean b = false; // char: 70 or 102 for F and f
    int userChar1;
    int userOperator;
    int userChar2;

    System.out.println("Please enter the term, e.g. T&F:");

    userChar1 = System.in.read();
    userOperator = System.in.read();
    userChar2 = System.in.read();

    a = userChar1 == 'T' || userChar1 == 't';
    b = userChar2 == 'T' || userChar1 == 't';

    switch (userOperator) {
    case '&':
        System.out.println(a & b);break;
    case '|':
        System.out.println(a | b);break;
    case '^':
        System.out.println(a ^ b);break;
    default:
        System.out.println("unknow operator");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析输入,除了 System.in.read() 之外不使用任何东西 的相关文章

随机推荐

  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 在为 Android 实现 Google 登录时,任务“:app:transformClassesWithDexForDebug”执行失败

    我正在尝试为 Android 实现 Google 登录 并且我正在按照以下说明进行操作 https developers google com identity sign in android start integrating https
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate

    我挖掘了很多关于DDD方法 无处不在的语言 聚合 存储库等 我认为 与我读到的很多内容相反 实体应该有行为而不是不可知论 我看到的所有例子都倾向于呈现实体虚拟自动属性 and an 空构造函数 受保护或最糟糕的是公开 就是这样 我认为这种对
  • 如何在 TextField 中垂直居中不同大小的hintText?

    我有一个TextField像这样 输入文本和提示文本的大小不同 TextField style Theme of context textTheme subhead copyWith fontSize 70 0 decoration Inp
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • 如何从 Visual Studio Community for Mac 安装本地 NuGet 包 (.nupkg)?

    我已经使用 nugget CLI 创建了一个包 但找不到从 IDE 安装它的方法 Mac 版本中不提供包管理器控制台 并且 nuget CLI 尝试从 Internet 检索包读取 nupkg 文件 我有 VS Community for
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致
  • 捕获 Unicode 文本(西里尔文)并将其插入 MS Access 数据库

    我继承了一个旧的 Web 应用程序 该应用程序使用经典 ASP 将表单中收集的数据写入 Access 2007 数据库 现在他们需要它能够收集西里尔字母的输入 我完全不熟悉代码页 字符集 也不熟悉非拉丁字母 我尝试将输入表单页面上的字符集更
  • Wirecloud 中的 Oauth2

    在运营商中实施 OAuth2 授权的最佳方式是什么 我们已经使用 PEP 代理保护我们的后端 API 并且我们需要一个有效的令牌 用户登录后 wirecloud 是否提供任何访问它的方法 例如 MashupPlatform context
  • 在Android Studio中更改项目主题?

    我使用浅色主题创建了一些项目 现在我想将其更改为深色 但我不知道该怎么做 顺便说一句 我不是问如何在代码中做到这一点 只是问如何更改项目的默认主题 在 AndroidManifest xml 的 application 标签下 您可以设置您
  • VBA Excel:将范围值分配给新范围

    我在将一个工作簿范围中的值分配给当前工作簿中的某个范围时遇到问题 当我使用 Range A1 C1 分配我的范围时 此代码工作正常 但是当我使用 Range Cells 1 1 Cells 1 3 定义我的范围时 该函数会失败 Sub Co
  • 文件位置 Rails 7 中的 Javascript 与样式表

    在使用导入映射功能的新默认 Rails 7 应用程序中 Javascript 存储在app javascript 而 CSS 位于app assets stylesheets 它们不仅位于不同的层次结构级别 而且javascript是奇异的
  • 已达到网络 BIOS 命令限制

    我的 ASP Net 应用程序从另一台 Windows 服务器上的共享文件夹获取文件 当请求增加时 我收到以下错误 The network BIOS command limit has been reached 我已按照以下步骤操作微软 K
  • 从所有会话中注销

    我有一个注销选项 这是我的代码 session start session destroy setcookie key time 60 60 24 setcookie username time 60 60 24 我想添加另一个选项来注销所
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T