Java实现输入输出数据和猜数字游戏

一、输入输出

1.输出到控制台

  • 输出语句:
    • 输出数据之后换行:System.out.println();(这里的ln的作用就是用来换行的,没有ln就是不换行)
    • 输出数据之后不换行:System.out.print();
      public class Main{
          public static void main(String args[]){
              System.out.println("111");
              System.out.println("");//输出语句中没有输出的内容是,该语句的功能就是可以换行
              //System.out.println();单独的也行,跟System.out.println("");是一样的作用
              System.out.println("222");
              System.out.print("333");
              System.out.print("444");
          }
      }
      

               

        输出

        111

        222
        333444

        111和222之间有一行空白,就是通过System.out.println("");实现的,也可以通过System.out.println();来实现换空白行,这两句输出代码在没有输出语句时的作用是实现换行,而System.out.println("");则没有换行功能,如果引号内什么数据都没有的话它什么都输出不了,但是代码能正确编译,如下

        但是如果改成System.out.print()的话则会报错,因为System.out.print()的括号内需要至少一个参数来指定要输出的内容,而前面的System.out.println("")是有参数的,只不过它的参数是一个空字符串(在Java中空字符串表示一个长度为零的字符串,即不包含任何字符的字符串。)

  • 字符串连接运算符(+):如果要在输出时连接多个字符串或者变量的值,则可以使用字符串连接运算符(+)来实现输出时连接多个字符串或者变量的值,如下代码可以将hello、 、world这三个字符连接起来了(中间那个是一个空格,空格也算是字符)
    public class Main{
        public static void main(Sting args[]){
        System.out.println("hello" + " " + "world!");//输出hello world!
    }
    } 

    但是注意,如果遇到以下代码,则输出时1已经是被转换成字符类型的数据来,已经不是int型的数据了。所以在 Java 中,当整型数据和字符串使用 + 运算符连接时,整型数据会被自动转换为字符串形式,然后进行字符串的连接操作。

    public class Main{
        public static void main(Sting args[]){
        int num = 1;
        System.out.println(num + "HelloWord");//输出1HelloWorld
    }
    } 

  • 扩展:
    • 字面量常量:指的是在代码中直接使用的固定值或常量,编译器在编译时将它们解析为相应的数据类型,并在程序运行时保持不变。在Java中,常见的字面量常量包括:
      • 整数常量
        • 十进制整数,如 123-456
        • 八进制整数,以 0 开头,如 077
        • 十六进制整数,以 0x 或 0X 开头,如 0x1F0xA5
      • 浮点数常量
        • 普通浮点数,如 3.14-0.5
        • 科学计数法表示,如 2.5e3(即 2.5 × 10^3)。
      • 字符常量
        • 用单引号括起来的单个字符,如 'a''9''!'。在Java中,字符常量是基于Unicode编码的。
      • 字符串常量
        • 用双引号括起来的字符序列,如 "Hello""123""abc"
      • 布尔常量
        • 仅有两个值:true 和 false,用来表示逻辑真和假。
      • 空常量
        • null,表示引用类型的空值。
  • System.out.println()中的字面量常量举例:
    • 整数字面量常量
      System.out.println(42); // 输出整数 42,这里的 42 是整数字面量常量
    • 布尔值字面量常量
      System.out.println(true); // 输出布尔值 true,这里的 true 是布尔值字面量常量
    • 字符字面量常量
      System.out.println('A'); // 输出字符 'A',这里的 'A' 是字符字面量常量
    • 浮点数字面量常量
      System.out.println(3.14); // 输出浮点数 3.14,这里的 3.14 是浮点数字面量常量

  • 格式化字符串输出:
    • %d - 十进制整数:用于格式化输出整数。
      int num = 42;
      System.out.printf("Decimal: %d%n", num);  // 输出: Decimal: 42
    • %x - 十六进制整数:用于格式化输出整数的十六进制表示。
      int num = 42;
      System.out.printf("Hexadecimal: %x%n", num);  // 输出: Hexadecimal: 2a
    • %o - 八进制整数:用于格式化输出整数的八进制表示。
      int num = 42;
      System.out.printf("Octal: %o%n", num);  // 输出: Octal: 52
      
    • %f - 浮点数:用于格式化输出浮点数。
      double num = 3.14159;
      System.out.printf("Float: %f%n", num);  // 输出: Float: 3.141590
    • %e - 科学计数法浮点数:用于以科学计数法格式化输出浮点数。
      double num = 123456.789;
      System.out.printf("Scientific notation: %e%n", num);  // 输出: Scientific notation: 1.234568e+05
    • %g - 根据值的大小决定使用%f或%e:根据值的大小选择使用%f(如果大)或%e(如果小)格式化输出浮点数。
      double num = 123456.789;
      System.out.printf("General: %g%n", num);  // 输出: General: 123457
      
    • %a - 十六进制浮点数:用于格式化输出浮点数的十六进制表示。
      double num = 0.125;
      System.out.printf("Hex float: %a%n", num);  // 输出: Hex float: 0x1.0p-3
    • %s - 字符串:用于格式化输出字符串。
      String str = "Hello";
      System.out.printf("String: %s%n", str);  // 输出: String: Hello
    • %c - 字符:用于格式化输出字符。
      char ch = 'A';
      System.out.printf("Character: %c%n", ch);  // 输出: Character: A
    • %b - 布尔值:用于格式化输出布尔值。
      boolean flag = true;
      System.out.printf("Boolean: %b%n", flag);  // 输出: Boolean: true
    • %h - 散列码:用于格式化输出对象的散列码(十六进制)。
      Object obj = new Object();
      System.out.printf("Hash code: %h%n", obj);  // 输出: Hash code: 7a8acfde
    • %.2f%% - 百分比格式化:用于格式化输出百分比值。
      double percentage = 0.75;
      System.out.printf("Percentage: %.2f%%%n", percentage * 100);  // 输出: Percentage: 75.00%

2.从键盘输入

  1. 使用 Scanner 类可以方便地从键盘或其他输入流中获取用户的输入数据
  2. Scanner 类的具体用法:
  • 导入 Scanner 类:需要导入 java.util.Scanner 类,因为 Scanner 类位于 java.util 包中。
    import java.util.Scanner;

  • 创建 Scanner 对象:要从键盘获取输入,需要创建一个 Scanner 对象,并将 System.in 作为参数传递给它,表示输入来自标准输入流(通常是键盘)。
Scanner scanner = new Scanner(System.in);

  • 使用 Scanner 读取不同类型的数据:Scanner 类提供了多种方法来读取不同类型的数据。以下是常用的方法:
    • nextInt(): 用于读取一个整数。
      System.out.print("请输入一个整数: ");
      int num = scanner.nextInt();
      System.out.println("您输入的整数是: " + num);
    • nextDouble(): 用于读取一个双精度浮点数。
      System.out.print("请输入一个浮点数: ");
      double d = scanner.nextDouble();
      System.out.println("您输入的浮点数是: " + d);
    • nextFloat(): 用于读取一个单精度浮点数。
        // 读取单精度浮点数
              System.out.print("请输入一个单精度浮点数: ");
              float f = scanner.nextFloat();
              System.out.println("您输入的单精度浮点数是: " + f);
    • nextLine(): 用于读取一行字符串。
      System.out.print("请输入一个字符串: ");
      String str = scanner.next(); // 或者使用 nextLine() 读取整行
      System.out.println("您输入的字符串是: " + str);
    • next(): 用于读取下一个单词(以空格作为分隔符)。当调用scanner.next()时,它会扫描输入流,直到找到下一个空白字符,然后返回该字符之前的字符序列作为一个单词。如果在调用next()之前有连续的空白字符(如多个空格),则这些空格会被忽略。假设用户输入了Hello world Java programming。如果使用scanner.next(),它会依次返回"Hello"、"world"、"Java"和"programming",每次调用next()都返回下一个按空白字符分隔的单词。
      import java.util.Scanner;
      
      public class HasNextExample {
          public static void main(String[] args) {
              // 创建Scanner对象
              Scanner scanner = new Scanner(System.in);
      
              // 提示用户输入
              System.out.print("请输入多个单词(以空格分隔): ");
      
              // 使用hasNext()和next()方法读取并输出每个单词
              while (scanner.hasNext()) {//scanner.hasNext()是用来检查是否有下一个输入数据的,有的话就继续循环,没有下一个输入的话就停止循环
                  String word = scanner.next();
                  System.out.println("您输入的单词是: " + word);
              }
      
              // 关闭Scanner对象
              scanner.close();
          }
      }

  • 注意事项:
    • 消耗换行符: 当使用 nextInt()nextDouble()nextFloat() 读取数据后,需要调用 scanner.nextLine() 来消耗掉剩余的换行符。这是因为 nextInt() 等方法并不会消耗掉输入中的换行符,而 nextLine() 会读取换行符并返回空字符串,因此需要额外调用一次以获取用户实际输入的内容。代码示例如下:
    • import java.util.Scanner;
      
      public class ConsumeNewLine {
          public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
      
              // 提示用户输入整数
              System.out.print("请输入一个整数: ");
              int number = scanner.nextInt();
      
              // 消耗掉剩余的换行符
              scanner.nextLine();
      
              // 提示用户输入字符串
              System.out.print("请输入一行文字: ");
              String text = scanner.nextLine();
      
              // 输出结果
              System.out.println("您输入的整数是: " + number);
              System.out.println("您输入的文字是: " + text);
      
              scanner.close();
          }
      }

      正常运行结果是这样的:

但是如果将scanner.nextLine()注释掉,则将会出直接跳过输入文字的那步,如图所示,就会出bug

  • 关闭scanner对象:在不再需要Scanner对象时,及时调用close()方法释放相关资源,尤其是在长时间运行的应用程序中。

二、猜数字游戏

1.游戏规则:

  1. 选择一个范围:确定一个数字的范围,例如从1到100,或者更大或更小的范围,取决于游戏的难度和参与者的能力。
  2. 出题者选定一个数字:出题者在设定好的范围内选择一个秘密数字,不告诉猜题者。
  3. 猜题者猜数字:猜题者开始猜测出题者选择的数字。每次猜测,猜题者提出一个可能的数字。
  4. 出题者给出反馈:出题者根据猜题者的猜测给出相应的反馈,通常包括以下几种情况:
    • 如果猜中了,出题者告知猜题者猜测正确,并结束游戏。
    • 如果猜测的数字比出题者的数字大,出题者告知猜题者“太大了”或“过高”。
    • 如果猜测的数字比出题者的数字小,出题者告知猜题者“太小了”或“过低”。
  5. 继续猜测:猜题者根据出题者的反馈调整猜测,继续提出新的数字,直到猜中为止。
  6. 游戏结束:游戏结束的条件是猜题者猜中了出题者的数字。可以根据需要记录猜测的次数,以便进行比较或者评分。

2.代码解析

  • 导入类
import java.util.Scanner;
import java.util.Random;
  1. Scanner 类用于从标准输入读取用户的输入。
  2. Random 类用于生成随机数。

  • 主类 GuessTheNumberGame
    ​
    import java.util.Scanner;
    import java.util.Random;
    
    ​
  1. main 方法是程序的入口点,Scanner 和 Random 对象被创建。
  • 设定数字范围
    int range = scanner.nextInt();
    
  1. 用户可以通过输入来设定数字的范围,这里通过 scanner.nextInt() 获取用户输入的范围。
  • 生成随机数
    int secretNumber = random.nextInt(range) + 1;
    // 随机选择一个1到100的数字
  1. random.nextInt(range) 生成一个介于 0(包含)和 range(不包含)之间的随机整数,然后通过 +1 调整范围为 1 到 range

  • 游戏逻辑
    int guess;
    int attempts = 0;
    
    System.out.println("欢迎参加猜数字游戏!我选了一个1到100之间的数字,请猜猜是多少?");
    
    do {
        System.out.print("你的猜测是: ");
        guess = scanner.nextInt();
        attempts++;
    
        // 给出提示
        if (guess < secretNumber) {
            System.out.println("太小了,请再试一次。");
        } else if (guess > secretNumber) {
            System.out.println("太大了,请再试一次。");
        }
    } while (guess != secretNumber);
  1. 使用 do-while 循环来进行猜测,直到用户猜中数字为止。
  2. 每次用户输入后,根据用户的猜测给出相应的提示,告知用户数字是太大还是太小。

  • 游戏结束
    System.out.println("恭喜你!你猜对了!数字是 " + secretNumber);
    System.out.println("你用了 " + attempts + " 次猜中。");
    
    scanner.close();
  1. 当用户猜中数字时,输出恭喜信息以及猜测次数,并关闭 Scanner 对象。

3.参考代码

import java.util.Scanner;
import java.util.Random;

public class GuessTheNumberGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();

        int range = scanner.nextInt();//用户可以手动设置要猜的数字的范围
        int secretNumber = random.nextInt(range) + 1; // 随机选择一个1到100的数字
        int guess;
        int attempts = 0;

        System.out.println("欢迎参加猜数字游戏!我选了一个1到100之间的数字,请猜猜是多少?");

        do {
            System.out.print("你的猜测是: ");
            guess = scanner.nextInt();
            attempts++;

            // 给出提示
            if (guess < secretNumber) {
                System.out.println("太小了,请再试一次。");
            } else if (guess > secretNumber) {
                System.out.println("太大了,请再试一次。");
            }
        } while (guess != secretNumber);

        System.out.println("恭喜你!你猜对了!数字是 " + secretNumber);
        System.out.println("你用了 " + attempts + " 次猜中。");

        scanner.close();
    }
}

  • 14
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超爱小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值