挑战用豆包教我学Java01天
今天是豆包教我学Java的第一天,废话不多说直接开始。
1.每日题目:
基础语法与数据类型
- 题目:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。
- 题目:编写一个程序,定义一个字符变量并赋值,然后将该字符转换为对应的 ASCII 码并输出。
- 题目:编写一个程序,声明一个布尔变量,根据不同的条件给它赋值,然后输出布尔变量的值。
2.题目一:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。
这个题目开始我不知道怎么输入值,于是问豆包:
问:怎么输入值?
答:
import java.util.Scanner;public class ScannerInputExample {public static void main(String[] args) {// 创建 Scanner 对象Scanner scanner = new Scanner(System.in);// 读取整数System.out.print("请输入一个整数: ");int num = scanner.nextInt();System.out.println("你输入的整数是: " + num);// 消耗掉 nextInt() 遗留的换行符scanner.nextLine();// 读取字符串System.out.print("请输入一个字符串: ");String str = scanner.nextLine();System.out.println("你输入的字符串是: " + str);// 读取浮点数System.out.print("请输入一个浮点数: ");double d = scanner.nextDouble();System.out.println("你输入的浮点数是: " + d);// 关闭 Scanner 对象scanner.close();}
}
- 导入
Scanner
类:在代码开头,使用import java.util.Scanner;
语句导入Scanner
类。 - 创建
Scanner
对象:通过Scanner scanner = new Scanner(System.in);
创建一个Scanner
对象,用于从标准输入读取数据。 - 读取不同类型的数据:
nextInt()
:用于读取整数。nextLine()
:用于读取一行字符串。nextDouble()
:用于读取浮点数。-
scanner.next().charAt(0):用于读取字符
- 关闭
Scanner
对象:使用完Scanner
对象后,调用scanner.close();
方法关闭它,以释放资源。
问:String[] args是干什么的
答:
String[] args
是一个字符串数组,它用于接收在命令行中运行 Java 程序时传递给程序的参数。当你在命令行中执行 Java 程序时,可以在程序名后面添加一系列由空格分隔的参数,这些参数会被存储在args
数组中。
问:Scanner scanner = new Scanner(System.in);是干什么的
答:
这行代码的主要功能是创建一个 Scanner
对象,这个对象能够从标准输入流里读取数据。在 Java 中,标准输入流一般指的就是键盘输入,所以借助这个 Scanner
对象,程序就可以获取用户通过键盘输入的信息。实则是创建了一个名字为scanner的类。
问:求a-b的绝对值怎么求
答:
Math.abs(a - b);
问:怎么输出换行
System.out.println("a - b 的绝对值是:");将print换成println。
问:将整数a转化为double
答:
强制转换:
double b = (double) a;
初步完成代码:
import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner scanner=new Scanner(System.in);System.out.println("请输入数值a,b");int a=scanner.nextInt();int b=scanner.nextInt();System.out.print("两数之和为:");System.out.println(a+b);//System.out.print(result);System.out.print("两数之差为:");System.out.println(a-b);System.out.print("两数之积为:");System.out.println(a*b);System.out.print("两数之商为:");System.out.print((double)a/b);}
}
我发给豆包看,他给出了一些意见:
优点
- 功能实现:代码准确地实现了基本的数学运算功能,通过
Scanner
类获取用户输入的两个整数,然后分别计算并输出它们的和、差、积、商,逻辑清晰,符合题目的要求。 - 输入处理:使用
Scanner
类来处理用户的输入,这是 Java 中常用的获取用户输入的方式,方便且易用。 - 商的处理:在计算两数之商时,使用
(double)a/b
进行强制类型转换,确保计算结果为浮点数,避免了整数除法导致的精度丢失问题。
可优化之处
- 异常处理:代码没有对用户输入进行异常处理。如果用户输入的不是有效的整数,程序会抛出
InputMismatchException
异常并终止。可以添加异常处理机制,增强程序的健壮性。 - 除数为零的情况:在计算两数之商时,没有考虑除数
b
为零的情况。当b
为零时,会抛出ArithmeticException
异常。应该在计算商之前进行判断,避免出现这种异常。 - 代码结构:可以将计算和输出的逻辑封装成方法,提高代码的可读性和可维护性。
- 资源管理:在使用完
Scanner
对象后,应该调用scanner.close()
方法关闭它,以释放系统资源。
按照他给的优化我们将代码继续优化:
最终代码:
import java.util.Scanner;import java.util.InputMismatchException;
public class Main{public static void main(String[] args){Scanner scanner=new Scanner(System.in);int a=0;int b=0;try {System.out.println("请输入数值a,b");a = scanner.nextInt();b = scanner.nextInt();System.out.print("两数之和为:");System.out.println(a+b);//System.out.print(result);System.out.print("两数之差为:");System.out.println(a-b);System.out.print("两数之积为:");System.out.println(a*b);System.out.print("两数之商为:");System.out.print((double)a/b);}catch(InputMismatchException e) {//处理异常System.out.println("输入无效,请输入有效的整数");}finally{scanner.close();}}
}
这样我将代码异常处理和除数为0的情况都解决了,还使用了调用 scanner.close()
关闭结尾。
3.题目二:编写一个程序,定义一个字符变量并赋值,然后将该字符转换为对应的 ASCII 码并输出。
问:字符怎么输入?
答:
这个题目写的时候有一个地方报错:
a = scanner.nextInt();
原因是字符的输入要变成:
a=scanner.next().charAt(0);
接着我写出了
初始代码:
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner scanner=new Scanner(System.in);char a;try {System.out.println("请输入字符:");a=scanner.next().charAt(0);System.out.println("转换为阿斯克码值为:");System.out.print(a-'0');}catch(InputMismatchException e) {System.out.println("输入有误,请重新输入!");}finally {scanner.close();}}
}
豆包评价:
优点
- 功能实现思路正确:整体思路是正确的,使用
Scanner
类从用户输入读取字符,并且尝试将其转换为 ASCII 码值输出。 - 异常处理:使用了
try-catch
块来捕获InputMismatchException
异常,当用户输入不匹配时会给出相应的错误提示,增强了程序的健壮性。 - 资源管理:在
finally
块中调用了scanner.close()
方法来关闭Scanner
对象,避免了资源泄漏。
存在的问题
- 转换逻辑错误:代码中使用
a - '0'
来计算 ASCII 码值,这是错误的。'0'
代表字符0
的 ASCII 码值,当你用字符a
减去'0'
时,得到的并不是字符a
的 ASCII 码值。实际上,在 Java 中,char
类型可以直接转换为int
类型,从而得到其对应的 ASCII 码值,正确的做法是使用(int)a
。 - 拼写错误:在输出提示信息时,“阿斯克码” 存在拼写错误,正确的表述是 “ASCII 码”。
- 输出换行问题:
System.out.print(a - '0');
使用的是print
方法,该方法不会自动换行,如果想要输出结果后换行,建议使用println
方法。
改进:
我把a-'0'改成了(int)a;
最终代码:
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner scanner=new Scanner(System.in);char a;try {System.out.println("请输入字符:");a=scanner.next().charAt(0);System.out.println("转换为阿斯克码值为:");System.out.println((int)a);}catch(InputMismatchException e) {System.out.println("输入有误,请重新输入!");}finally {scanner.close();}}
}
4.题目三:编写一个程序,声明一个布尔变量,根据不同的条件给它赋值,然后输出布尔变量的值。
初始代码:
//题目:编写一个程序,声明一个布尔变量,根据不同的条件给它赋值,然后输出布尔变量的值。
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner asd=new Scanner(System.in);boolean a=true;int b;int c;try{System.out.println("请输入两个数:");b=asd.nextInt();c=asd.nextInt();int d=b-c;if(d>0){a=true;}else if(d<0){a=false;}System.out.println(a);}catch(InputMismatchException e){System.out.println("输入有误,请重新输入!");}finally{asd.close();}}
}
可优化之处
- 变量命名:变量名
asd
没有明确的含义,不利于代码的阅读和维护。建议使用更具描述性的变量名,如scanner
。 - 初始赋值冗余:布尔变量
a
初始赋值为true
,但后续在if - else if
语句中会重新赋值,所以初始赋值可以省略。 else if
可简化:由于d
只有大于 0、小于 0 和等于 0 三种情况,这里可以将else if
简化为else
。- 差值为 0 的情况:代码中没有处理
d
等于 0 的情况,可以根据需求添加相应的逻辑。
最终代码:
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner asd=new Scanner(System.in);boolean a;int b;int c;try{System.out.println("请输入两个数:");b=asd.nextInt();c=asd.nextInt();int d=b-c;if(d>=0){a=true;}else{a=false;}System.out.println(a);}catch(InputMismatchException e){System.out.println("输入有误,请重新输入!");}finally{asd.close();}}
}
相关文章:
挑战用豆包教我学Java01天
今天是豆包教我学Java的第一天,废话不多说直接开始。 1.每日题目: 基础语法与数据类型 题目:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。题目:编写…...
0903Redux改造项目_用户信息_状态管理-react-仿低代码平台项目
文章目录 1 Redux管理用户信息1.1 定义store和reducer1.2 使用useSeletor 2 自定义Hook统一加载用户信息存储Redux3 根据用户登录状态动态跳转页面结语 1 Redux管理用户信息 1.1 定义store和reducer src/store/userReducer.ts代码如下所示: import { createSlice…...

LeapVAD:通过认知感知和 Dual-Process 思维实现自动驾驶飞跃——论文阅读
《LeapVAD: A Leap in Autonomous Driving via Cognitive Perception and Dual-Process Thinking》2025年1月发表,来自浙江大学、上海AI实验室、慕尼黑工大、同济大学和中科大的论文。 尽管自动驾驶技术取得了显著进步,但由于推理能力有限,数…...

windows 部署 Kafka3.x KRaft 模式 不依赖 ZooKeeper
1.下载 https://archive.apache.org/dist/kafka/3.9.0/kafka_2.12-3.9.0.tgz2.配置使用 KRaft 模式 2.1 修改 Kafka 的配置文件 cd D:\data\bigdata\kafka_2.12-3.9.0\config\kraft 修改 server.properties # 设置 Kafka 数据日志存储目录 log.dirsD:\\data\\bigdata\\kaf…...

Xilinx FPGA | 管脚约束 / 时序约束 / 问题解析
注:本文为 “Xilinx FPGA | 管脚约束 / 时序约束 / 问题解析” 相关文章合辑。 略作重排,未整理去重。 如有内容异常,请看原文。 Xilinx FPGA 管脚 XDC 约束之:物理约束 FPGA技术实战 于 2020-02-04 17:14:53 发布 说明&#x…...

Python-JsonRPC
Python-JsonRPC 使用Python学习JsonRPC数据交互 1-核心知识点 1)什么是JsonRPC,这种协议是如何工作的?->使用请求进行验证2)JsonRPC可以使用Postman进行验证吗?->可以使用POSTMAN进行调用(使用HTTP请…...

Redis从入门到实战——实战篇(下)
四、达人探店 1. 发布探店笔记 探店笔记类似于点评网站的评价,往往是图文结合。对应的表有两个: tb_blog:探店笔记表,包含笔记中的标题、文字、图片等tb_blog_comments:其他用户对探店笔记的评价 步骤①࿱…...

面试问题(连载。。。。)
flexbox 和 crid 的区别 1. 布局维度与核心特性 Flexbox(弹性盒子) 一维布局:专注于行或列的线性排列,适合单方向(水平或垂直)的布局需求。动态分配空间:通过 flex-grow、flex-shrink 和 flex…...
springboot项目tomcat中加载不了
Spring Boot项目在Tomcat中加载不了的问题可能由多种原因引起,包括打包方式不正确、依赖配置错误、启动类配置不当等。以下是详细的解决方案: 1. 修改项目打包形式 将项目打包形式从jar改为war,以确保项目以正确的格式被Tomcat加载。在pom.…...
venv和pyenv在mac上
是的,理论上你可以用 venv 选择 Python 版本,但有一个关键前提:系统中必须已安装该版本的 Python 解释器。venv 本身并不提供 Python 版本管理功能,它只是基于现有的 Python 环境创建虚拟隔离空间。以下分场景详细说明:…...

OpenCv实战笔记(1)在win11搭建opencv4.11.1 + qt5.15.2 + vs2019_x64开发环境
一. 准备工作 Visual Studio 2019(安装时勾选 C 桌面开发 和 Windows 10 SDK) CMake 3.20(官网下载) Qt 5.15.2(下载 Qt Online Installer)安装时勾选 MSVC 2019 64-bit 组件。 opencv 4.11.1 源码下载 git…...
前端获取流式数据并输出
在一些实时对话、日志推送等场景下,如果使用传统一次性加载数据的方式,可能会出现等待时间较长的不友好交互,这个时候我们需要使用流式布局分段获取数据,渐进式加载,减少等待焦虑。 原生js上,我们使用fetch…...

全局网络:重构数字时代的连接范式
从局部到全局 —— 网络架构的范式革命 在全球化与数字化深度融合的今天,传统网络架构的 “碎片化” 问题日益凸显:跨地域数据流通低效、设备互联孤岛化、安全策略难以统一。 全局网络作为一种突破地域与技术边界的新型网络架构,正成为企业…...

C++ Primer (第五版)-第十四章重载运算与类型转换
文章目录 一、基本概念可以被重载某些运算符不应被重载尽量明智使用运算符重载赋值和复合赋值运算符选择作为成员或者非成员 输入和输出运算符输入运算符尽量减少格式化操作输入输出运算符必须是非成员函数 重载输入运算符>>输入时的错误标示错误 算数和关系运算符相等运…...
nt!MiSessionAddProcess函数分析和nt!MmSessionSpace全局变量的关系
第一部分: 1: kd> g Breakpoint 42 hit nt!MiSessionAddProcess: 80ab2fbe 55 push ebp 1: kd> kc # 00 nt!MiSessionAddProcess 01 nt!MmCreateProcessAddressSpace 02 nt!PspCreateProcess 03 nt!NtCreateProcessEx 04 nt!_KiSystemServic…...

鸿蒙开发——5.ArkUI @Builder装饰器:打造高效可复用的UI组件
鸿蒙开发——5.ArkUI Builder装饰器:打造高效可复用的UI组件 ArkUI Builder装饰器:打造高效可复用的UI组件一、Builder装饰器是什么?二、两种构建函数类型1. 私有自定义构建函数2. 全局自定义构建函数 三、参数传递核心规则1. 按值传递&#…...
bash和zsh的区别
Bash(Bourne-Again SHell)和 Zsh(Z Shell)都是 Unix/Linux 系统中的主流 Shell,但它们在功能、配置和用户体验上有显著区别。以下是两者的详细对比: 1. 历史与兼容性 特性BashZsh诞生时间1989 年ÿ…...

PyTorchVideo实战:从零开始构建高效视频分类模型
视频理解作为机器学习的核心领域,为动作识别、视频摘要和监控等应用提供了技术基础。本教程将详细介绍如何利用PyTorchVideo和PyTorch Lightning两个强大框架,构建基于Kinetics数据集训练的3D ResNet模型,实现高效的视频分类流程。 PyTorch…...
深入理解Spring缓存注解:@Cacheable与@CacheEvict
在现代应用程序开发中,缓存是提升系统性能的重要手段。Spring框架提供了一套简洁而强大的缓存抽象,其中Cacheable和CacheEvict是两个最常用的注解。本文将深入探讨这两个注解的工作原理、使用场景以及最佳实践。 1. Cacheable注解 基本概念 Cacheable…...
Rust 与 Golang 深度对决:从语法到应用场景的全方位解析
一、引言 在软件开发的快速发展浪潮中,Rust 和 Golang(Go 语言)脱颖而出,成为开发者热议的编程语言。Rust 凭借强大的内存安全性与卓越的性能备受赞誉,Golang 则以简洁的语法和出色的并发处理能力赢得开发者青睐。本文…...
java加强 -泛型
概念 定义类、接口、方法时,同时声明了一个或多个类型变量(如<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。 语法 public class ArrayList<E>{} E可以接收不同类型的数据,可以是字符串&…...
pygame联网飞机大战游戏实现
客户端 import pygame import socket import json import threadingclass GameClient:def __init__(self):pygame.init()self.screen_width 600 # 宽度减小self.screen_height 800 # 高度增加self.screen pygame.display.set_mode((self.screen_width, self.screen_heigh…...

SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(二)
8 行为规范 8.1 本章定义监督实体(Supervisor)与加工资源(Processing Resource)为实现物料加工所需的高层级通信逻辑,不涉及具体消息细节(详见第10章消息服务)。 8.2 加工任务通信 8.2.1 加工…...

根据窗口大小自动调整页面缩放比例,并保持居中显示
vue 项目 直接上代码 图片u1.png 是个背景图片 图片u2.png 是个遮罩 <template><div id"app"><div class"viewBox"><divclass"screen":style"{ transform: translate(-50%,-50%…...
如何在Jmeter中调用C程序?
在JMeter中调用C语言程序可以通过以下几种方式实现: 方法一:使用OS Process Sampler JMeter的“OS Process Sampler”可以用来调用外部程序,包括C语言编写的可执行文件。 步骤: 准备C语言程序: 编写C语言代码并编译…...

Android SDK 国内镜像及配置方法(2025最新,包好使!)
2025最新android sdk下载配置 1、首先你需要有android sdk manager2、 直接上教程修改hosts文件配置域名映射即可(不用FQ)2.1 获取ping dl.google.com域名ip地址2.2 配置hosts文件域名映射2.3 可以随意下载你需要的sdk3、 总结:走过弯路,踩过坑!!!大家就不要踩了!避坑1…...

【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现
🎵 【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情…...

OpenStack Yoga版安装笔记(26)实例元数据笔记
一、实例元数据概述 1.1 元数据 (官方文档:Metadata — nova 25.2.2.dev5 documentation) Nova 通过一种叫做元数据(metadata)的机制向其启动的实例提供配置信息。这些机制通常通过诸如 cloud-init 这样的初始化软件…...

【Linux】swap交换分区管理
目录 一、Swap 交换分区的功能 二、swap 交换分区的典型大小的设置 2.1 查看交换分区的大小 2.1.1 free 2.1.2 cat /proc/swaps 或 swapon -s 2.1.3 top 三、使用交换分区的整体流程 3.1 案例一 3.2 案例二 一、Swap 交换分区的功能 计算机运行一个程序首先会将外存&am…...
Spring IoC (Inversion of Control) 控制反转是什么?
我们分析一下 IoC (Inversion of Control) 控制反转的核心思想。 核心思想: IoC 是一种设计原则(Design Principle),它描述了一种软件设计模式,其中组件(对象)的创建、依赖关系的管理和生命周…...