当前位置: 首页 > news >正文

Java输入输出:编程世界的入口和出口

目录

PS:输入输出为什么如此重要

一、输出

1.1 System.out.println()

1.2 println 和 print

1.3 输出变量的值

1.4 格式化打印

二、Java 的输入

2.1 引入Scanner类

2.1 第一步:引入 Scanner

2.2 第二步:创建 Scanner 对象

2.3 第三步:读取不同类型的输入

next() vs nextLine() 的区别

简单的对比表格

解决方案:在 nextInt() 后加一个 nextLine()

三、个人信息收集器

项目需求:

3.1 大框架

3.2 询问用户姓名

3.3 询问年龄

3.4 询问身高

3.5 展示最后的面板

3.6 释放系统资源

四、释放资源


PS:输入输出为什么如此重要

想象一下你正在用手机点外卖:

  • 输入了地址、选择了菜品(这是“输入”)
  • 系统显示订单总价、预计送达时间(这是“输出”)

如果没有没有输入,手机就不能接受你的地址和选择的菜品;输出也一样,你也无法看到外卖的流程到哪一步,也无法看到外卖骑手的大概位置.

在 Java 编程中,输入(Input)输出(Output) 合称 I/O(读作 “eye-oh”),是几乎所有程序的基础。哪怕是最简单的计算器(我们上篇博客的最后练习)、猜数字游戏,都离不开 I/O。

而对初学者来说,“怎么让程序接收我的输入?”“怎么让它把结果告诉我?” 是最先遇到的两个问题,也是我们这篇博客的学习目标.

一、输出

1.1 System.out.println()

在我们学习java的第一天,我们就接触到了System.out.println(),在IDEA里面简写为“sout”,也就是下面这个代码:

public class main {static void main(String[] args) {System.out.println("Hello World");}
}

运行后屏幕会显示Hello World

但是,大家知道System.out.println()可以拿来打印,那我问大家,这段代码是什么意思呢?

其实大家能回答出来的也没有很多

  • System.out:代表“系统的输出设备”,通常是电脑屏幕
  • println:是 “print line” 的缩写,意思是“打印一行”
  • "Hello, World!":你要打印的内容(用双引号括起来的叫“字符串”)

总的来说 System.out.println(你想说的话); 就是让程序在屏幕上“说话”。

1.2 println 和 print

现在我们来试试这两段代码(分别使用println 和 print)最后的输出内容是什么:

static void main(String[] args) {System.out.println("Hello");System.out.println(" World");System.out.print("Hello");System.out.print(" World");}

大家可以明显的看出区别:

  • print:打印完不换行,光标停在末尾
  • println:打印完自动换行,下一次输出从新一行开始

1.3 输出变量的值

光输出固定文字太无聊了。我们还可以输出变量(可以变化的值)。

    static void main(String[] args) {int age = 18;String name = "张三";System.out.println("我今年" + age + "岁");System.out.println("我的名字叫" + "张三");}

这里用了 + 号连接文字和变量,就像拼积木一样。

注意:+ 在这里是“拼接”意思,不是数学加法(虽然对数字也适用,但语境不同)。

1.4 格式化打印

在我们的java语言里,使用printf()来格式化输出.

如果你希望数字保留两位小数,或者对齐输出,可以用 System.out.printf()

    public static void main(String[] args) {double price = 19.9;int count = 3;double total = price * count;System.out.printf("单价 %.2f 元\n", price);System.out.printf("计数 %d 元\n", count);System.out.printf("总价 %.2f 元\n", total);}

输出见下图:

关键符号解释:

  • %f:表示一个浮点数(小数)
  • %.2f:保留两位小数
  • %d:表示一个整数
  • \n:换行符(相当于按回车)

printf 来自 C 语言,意思是 “print formatted”(格式化打印)。它很强大,但初学用 println 就够了。

二、Java 的输入

2.1 引入Scanner类

要让程序能够接收用户的输入,我们需要使用Scanner类。首先要在程序开头告诉Java我们要使用这个工具:

具体语法:

import java.util.Scanner;//导入包public class main {public static void main(String[] args) {Scanner 变量名1 = new Scanner(System.in);变量类型 变量名2 = 变量名1.nextLine();变量名1.close();//调用关闭方法}
}

现在我们来一个非常基础的java代码:

import java.util.Scanner;  // 导入Scanner类
public class main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入你的姓名");String name = sc.nextLine();System.out.println("你的姓名是: " +  name);sc.close();//注意,要记得调用关闭方法}
}

那么接下来让我们逐步来解释一下核心代码

2.1 第一步:引入 Scanner

Sanner作为一个类(我们第五篇博客就会讲到java的类),java并不能直接“打开它”,所以需要我们“导入”(IDEA作为智能的编辑器,只需要创建一个Sanner实例就会自动导入)

在代码最上方写:

import java.util.Scanner;  // 导入Scanner类

想象一下:import 就像去工具箱里拿一把“输入专用的钥匙”。

2.2 第二步:创建 Scanner 对象

我们需要在main方法里创建一个Sanner实例:

Scanner scanner = new Scanner(System.in);//创建一个Scanner对象
  • System.in:代表“系统的输入设备”,通常是键盘

现在,scanner 就能帮你“听”用户从键盘敲的内容了。

2.3 第三步:读取不同类型的输入

Scanner 提供多种方法读取不同类型的数据:

方法作用示例
nextInt()读取一个整数int age = scanner.nextInt();
nextDouble()读取一个小数double height = scanner.nextDouble();
next()读取一个单词(不能有空格)String name = scanner.next();
nextLine()读取一整行(包括空格)String sentence = scanner.nextLine();
   public static void main(String[] args) {Scanner sc = new Scanner(System.in);String a =  sc.nextLine();//读取一整行(包括空格)最常用double age = sc.nextDouble();//读取一个小数int price = sc.nextInt();//读取一个整数String word = sc.next();//读取一个单词sc.close();System.out.println(a);System.out.println(age);System.out.println(price);System.out.println(word);}

next() vs nextLine() 的区别

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你的姓名");System.out.print("请输入你的姓:");String firstName = scanner.next();  // 读取到空格为止System.out.print("请输入你的名:");String lastName = scanner.next();System.out.println("你的姓名是:" + firstName + " " + lastName);// 清除缓冲区scanner.nextLine();System.out.print("请输入你的完整地址:");String address = scanner.nextLine();  // 读取整行System.out.println("你的地址是:" + address);scanner.close();}

简单的对比表格

方法读取内容停止条件例子
next()一个单词遇到空格或回车输入"张三 李四" → 读取"张三"
nextLine()整行文字遇到回车键输入"张三 李四" → 读取"张三 李四"

运行结果见下图:

这里可能大家不是很懂,那么我们看看接下来这个代码:

    static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("输入年龄:");int age = scanner.nextInt();System.out.print("输入姓名:");String name = scanner.nextLine();System.out.println("你好," + name + "," + age + "岁");}

你以为运行结果会是这样:

输入年龄:20
输入姓名:小明
你好,小明,20岁

但是真正的运行结果见下图:

为什么?

因为 nextInt() 只读数字,不读你按的回车键。那个回车还留在“输入缓冲区”里。

当紧接着调用 nextLine() 时,它立刻读到这个回车,认为“用户已经输入了一行(空行)”,于是返回空字符串。

解决方案:在 nextInt() 后加一个 nextLine()
    static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("输入年龄:");int age = scanner.nextInt();scanner.nextLine(); // 消耗掉多余的回车System.out.print("输入姓名:");String name = scanner.nextLine();System.out.println("你好," + name + "," + age + "岁");}

三、个人信息收集器

光看不动手,等于没学。我们来做一个 “个人信息收集器”,综合运用所学知识。

项目需求:

  1. 询问用户姓名(支持中文和空格)
  2. 询问年龄(整数)
  3. 询问身高(小数)
  4. 最后汇总输出所有

3.1 大框架

先把项目大框架构建一下:

    static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("-----个人信息收集器-----");//询问用户姓名//询问年龄//询问身高//展示最后的面板//释放系统资源}

3.2 询问用户姓名

//询问用户姓名System.out.println("输入姓名");String name = sc.nextLine();

3.3 询问年龄

    System.out.println("输入你的年龄");int age = sc.nextInt();sc.nextLine();//读取回车

3.4 询问身高

    System.out.println("输入你的身高");double height = sc.nextDouble();sc.nextLine();

3.5 展示最后的面板

        System.out.println("\n--- 你的信息如下 ---");System.out.println("姓名:" + name);System.out.println("年龄:" + age);System.out.printf("身高:%.2f 米%n", height);System.out.println("感谢填写!");

3.6 释放系统资源

sc.close();

四、释放资源

sc.close() 的位置和影响(逻辑隐患)

  • Scanner(System.in) 关闭后,标准输入流 System.in 也会被关闭
  • 如果程序后续还要读取输入(比如在更大的项目中),会抛出异常。
  • 对于简单的小程序,关掉没问题;但在复杂程序中,通常不建议关闭包装 System.in 的 Scanner

http://www.dtcms.com/a/614199.html

相关文章:

  • Xcode编译C语言:提升编译效率与调试技巧
  • MONGO-EXPRESS Docker 容器化部署指南
  • 免费psd图片素材网站邯郸网站开发
  • IDEA配置Maven
  • 昆明做网站外包预定型网站有哪些
  • 深圳建设工程交易中心网站百度链接提交地址
  • 《中医基础理论》- 2.哲学基础之藏象学说-肾系统详解
  • 绍兴网站建设方案响应式网站建设报价单
  • 采用Langchain调用LLM完成简单翻译任务
  • 游戏网站建设流程图注册一个电商公司需要多少钱
  • 深度拥抱变革:AI 重塑临床工作流与医院信息化的战略蓝图与实施路线
  • 北京网站制作公司招聘淘宝客网站备案
  • 服务器开荒:安装宝塔面板
  • 基于AWS的应用程序可靠性提升架构优化方案——RDS多可用区与EC2弹性架构实践
  • 数据库事务ACID特性详解
  • 基于单片机的自行车速度与里程检测报警系统设计
  • 网站运营计划书建筑费用明细表模板
  • GPT-5.1发布!你的AI更暖更智能!
  • 万悉科技GEO专题分享会——共探AI时代中国出海企业的流量新机遇
  • 商业网站的相关内容青岛网站设计网站
  • Python判断字符串中是否有中文
  • 前端动画技术发展方向
  • 图片网站该如何做seo优化万户网络做网站怎么样
  • qt显示类控件---QLCDNumber
  • C#1115变量
  • 钓鱼网站排名假冒建设银行最多wordpress停止更新
  • 思维链(CoT)的本质:无需架构调整,仅靠提示工程激活大模型推理能力
  • 【CUDO云服务器】基本配置
  • 光明新区做网站网站的风格保持一致
  • 信创时代下,PHP/MySQL应用的平滑迁移与运维管理升级(AI整理)