【Java】基本程序设计结构(二)

前言:上一篇我们详细介绍了Java基本程序设计结构中前半部分,一个简单的Java应用,注释,数据类型,变量与常量,运算符,字符串。包括本篇将延续上篇内容介绍后续内容,包括输入输出,控制流,大数值。
![Alt](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center

文章目录

    • 一.输入输出
      • 1.1读取输入
      • 1.2格式化输出
    • 二.控制流
      • 2.1块作用域
      • 2.2条件语句
      • 2.3循环语句
      • 2.4 switch语句
    • 三.大数值

一.输入输出

为了增加后面示例程序的趣味性,需要程序能够接收输人,并以适当的格式输出。当然,现代的程序都使用GUI(图形用户界面)收集用户的输人,然而,编写这种界面的程序需要使用较多的工具与技术,目前还不具备这些条件。主要原因是需要熟悉Java程序设计语言,因此只要有简单的用于输入输出的控制台就可以了。

1.1读取输入

读取输入前面已经看到,打印输出到“标准输出流”(即控制台窗口)是一件非常容易的事情,只要调用System.out.println即可。然而,读取“标准输入流”System.in就没有那么简单了。要想通过控制台进行输人,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。

Scanner scanner = new Scanner(System.in);

现在,就可以使用Scanner类的各种方法实现输入操作了。

System. out. print("What is your name? ");
String name = in. nextLine();

在这里,使用nextLine方法是因为在输人行中有可能包含空格。要想读取一个单词(以空白符作为分隔符),就调用

String firstName = in. next();

要想读取一个整数,就调用nextInt方法。

System. out. print("How old are you? ");
int age = in. nextInt();

与此类似,要想读取下一个浮点数,就调用nextDouble方法。
接下来看一个示例:

import java.util.*;public class InputTest{public static void main(String[] args){Scanner in=new Scanner(System.in);//获取第一个输入System.out.println("你的名字是?");String name=in.nextLine();//获取第二个输入System.out.println("你的年龄是?");int age=in.nextInt();//显示结果到控制台上System.out.println("Hello"+name+"Next Year you will be"+(age+1));}
}

当使用的类不是定义在基本java.lang包中时,一定要使用import指示字将相应的包加载进来。否则在dos命令行中就会出现以下错误:
在这里插入图片描述
引入了包之后,我们就能得到:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2格式化输出

可以使用 System . out . print (x)将数值x输出到控制台上。这条命令将以x对应的数据类型所允许的最大非0数字位数打印输出x。
例如:

double x = 10000.0/3.0;
System.out.prinln(x);//3333.3333333333335

如果希望显示美元、美分等符号,则有可能会出现问题。
在早期的Java版本中,格式化数值曾引起过一些争议。庆幸的是,JavaSE5.0沿用了C语言库函数中的printf方法。例如,调用System.out.printf("%8.2f", x);可以用8个字符的宽度和小数点后两个字符的精度打印x。也就是说,打印输出一个空格和7个字符,如下所示:3333.33
在printf中,可以使用多个参数,例如:System.out. printf("Hello, %s. Next year, you'll be %d", name, age);这和C语言的格式化输出是相类似的。每一个以%字符开始的格式说明符都用相应的参数替换。格式说明符尾部的转换符将指示被格式化的数值类型:f表示浮点数,s表示字符串,d表示十进制整数。具体如下表:
在这里插入图片描述
另外,还可以给出控制格式化输出的各种符号标志,例如:

System.out.print("%,.2f",10000.0/3.0);
//333,3.33

可以使用多个标志,例如:"%,(.2f"表示使用分组的分隔符并将负数括在括号内。更多标志如下图:
在这里插入图片描述
在这里插入图片描述
格式说明符具体使用也是有顺序的,如下:
在这里插入图片描述

二.控制流

与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。我们先讨论条件语句,然后讨论循环语句,最后介绍看似有些笨重的switch语句,当需要对某个表达式的多个值进行检测时,可以使用switch语句。

2.1块作用域

在深入学习控制结构之前,需要了解块(block)的概念。块(即复合语句)是指由一对花括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。但是我们不能在嵌套的块中两次声明一个同名的变量(即使C++是允许的,但是Java认为这是十分不安全的)。例如下面示例就是一个错误示范:
在这里插入图片描述

2.2条件语句

在Java中,条件语句的格式为if (condition) {statement}这里的条件必须用括号括起来。与绝大多数程序设计语言一样,Java常常希望在某个条件为真时执行多条语句。在这种情况下,应该使用块语句(block statement)。

if(yourSales>target)
{
//statement1
//statement2
//...
}

与C一样,比较常见的条件语句除了上面的示例还有下面两种:
1>if——else型:(仅仅理解结构即可,内容不作理会)
在这里插入图片描述
注意:这里的else遵循就近原则——即else只会与离它最近的if配对。所以在使用的时候一定要分清else和哪一个if是相对应的。
2>if——else if——else型:
在这里插入图片描述

2.3循环语句

与C语言一样,Java中的循环语句同样有三种。总的来说分为不确定循环确定循环

不确定循环:
1.while循环

2.do-while循环

while与do-while语句最大的区别就是do_while循环的语句会至少执行一次,而while语句可能一次都不执行。
因为对于while语句来说首先要要判断条件是否为true,只有当条件为true的时候才会继续向下进行。
在这里插入图片描述
在这里插入图片描述

确定循环:
for循环

for循环语句是支持迭代的一种通用结构,利用每次迭代后更新计数器来控制迭代次数。

for(1;2;3){statement}

for语句的第1部分通常用于对计数器初始化;第2部分给出每次新一轮循环执行前要检测的循环条件;第3部分指示如何更新计数器。
示例如下:

for(int i=1;i<=10;i++){System.out.print(i);//打印1到10
}

此外,Java中还提供一种很强的循环结构,可以用来处理依次数组(或其他元素集合)中的每一个元素,而不必考虑指定下标值。
它的格式如下:

for(寄存变量:目标集合)

我们可以使用for each循环处理一维数组或二维数组,示例如下:

int[] num = new int[10];
for (int i = 0; i < data.length; i++)data[i] = i ;
for (int NUM : num)System.out.printf("%d\t", NUM + 10);//10 11	12...
int[][] form = new int[10][5];
for (int i = 0; i < form.length; i++) {for (int j = 0; j < form[0].length; j++) {form[i][j] = i * j;}
}
for (int[] form1 : form) {for (int form2 : form1)System.out.printf("%d\t", form2);System.out.println();  /* 0	0	0	0	0	0	1	2	3	4	0	2	4	6	8	0	3	6	9	12	0	4	8	12	16	0	5	10	15	20	0	6	12	18	24	0	7	14	21	28	0	8	16	24	32	0	9	18	27	36	
*/ 
}

2.4 switch语句

switch语言用于处理多个选项。此时使用if/else就会略显笨拙。Java有一个和C/C++完全相同的switch语法:

switch(表达式){case 常量值1:{语句1;[break;]}case 常量值2:{语句2;[break;]}/*执行流程:
1. 先计算表达式的值
2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
3. 当表达式的值没有与所列项匹配时,执行default
代码示例: 根据 day 的值输出星期【注意事项】
多个case后的常量值不可以重复
switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long类型
引用类型:String常量串、枚举类型...default:{内容都不满足时执行语句;[break;]} */
}

由于Java是一种强类型的语言,如果swtich后面括号的表达式不符合上面所述类型,就会出现报错:

double num = 1.0;
switch(num) {case 1.0:System.out.println("hehe");break;case 2.0:System.out.println("haha");break;
}// 编译出错
//Test.java:4: 错误: 不兼容的类型: 从double转换到int可能会有损失

此外,switch语句还要注意以下几点:

  • break不能丢失,不然会失去“多分支选择”的功能;
int day = 1;
switch(day) {case 1:System.out.println("星期一");// break;case 2:System.out.println("星期二");break;
}// 运行结果
星期一
星期二
  • switch语句支持嵌套,但是很丑,一般不建议;
int x = 1;
int y = 1;
switch(x) {case 1:switch(y) {case 1:System.out.println("hehe");break;}
  • switch后面括号不能表达复杂的条件。
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. 
if (num > 10 && num < 20) {System.out.println("hehe");
}

三.大数值

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigIntegerBigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。使用静态的valueOf方法可以将普通的数值转换为大数值:BigInteger a = BigInteger. valueOf(100);
遗憾的是,不能使用人们熟悉的算术运算符(如:+和*)处理大数值。而需要使用大数值类中的*addmultiply方法。

在这里插入图片描述
下面的程序示例是一个彩票抽奖的改进代码,使其可以采用大数值进行运算。假设你被邀请参加抽奖活动,并从490个可能的数值中抽取60个,这个程序将会得到中彩概率1/716395843461995557415116222540092933411717612789263493493351013459481104668848。祝你好运!改进前,用于计算的语句是lotteryOdds = lotteryOdds * (n - i + 1) / i;
如果使用大数值,则相应的语句为:
lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1)).divide(BigInteger.valueOf(i));
(感兴趣的同学了解一下)

import java.math.BigInteger;
import java.util.Scanner;/*** @author 维C果糖* @create 2017-02-15*/public class ExOfBigValue {/*** 模拟彩票中奖的概率*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入您的幸运数字:");int k = sc.nextInt();System.out.println("请输入您能想到的最大整数:");int n = sc.nextInt();/*** 计算的二项式系数为:n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)*/BigInteger bi = BigInteger.valueOf(1);for (int i = 1; i <= k ; i++) {bi = bi.multiply(BigInteger.valueOf(n - i + 1)).divide(BigInteger.valueOf(i));}System.out.println("您中奖的概率是 1/" + bi + ",祝您好运!");}
}

感谢观看至此,以上就是对Java基本程序设计结构(一)的一些补充,希望屏幕前的你能有所收获,下一篇将对Java中的数组这一非常重要概念作以详细介绍,希望大家持续关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/319872.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「 网络安全常用术语解读 」通用配置枚举CCE详解

1. 背景介绍 NIST提供了安全内容自动化协议&#xff08;Security Content Automation Protocol&#xff0c;SCAP&#xff09;为漏洞描述和评估提供一种通用语言。SCAP组件包括&#xff1a; 通用漏洞披露(Common Vulnerabilities and Exposures, CVE)&#xff1a;提供一个描述…

2024年 Java 面试八股文——SpringCloud篇

目录 1.Spring Cloud Alibaba 中的 Nacos 是如何进行服务注册和发现的&#xff1f; 2.Spring Cloud Alibaba Sentinel 的流量控制规则有哪些&#xff1f; 3.Spring Cloud Alibaba 中如何实现分布式配置管理&#xff1f; 4.Spring Cloud Alibaba RocketMQ 的主要特点有哪些&…

2024“天一永安杯“宁波第七届网络安全大赛极安云科战队部分WP

“天一永安杯”2024 宁波第七届网络安全大赛暨第九届大学生网络技术与信息安全大赛 大赛竞赛形式 一、线上初赛 参赛人员&#xff1a;各单位自行选拔3人&#xff08;设队长1名&#xff09;组成团队&#xff0c;不足3人不允许参赛。 竞赛时间&#xff1a;8&#xff1a;30-12&…

ES集群数据备份与迁移

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、文章涉及概念讲解二、操作步骤1.创建 snapshot repository操作主机hadoop1分别操作从机hadoop2和hadoop3 2. 查看仓库信息3. 备份索引&#xff0c;生成快照…

【精品毕设推荐】基于JSP物流信息网的设计与实现

点击免费下载原文及代码、PPT 摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主…

Android 音视频基础知识

本系列文章会介绍两个 Android NDK Demo&#xff0c;拉流端会实现一个基于 FFmpeg 的视频播放器 Demo&#xff0c;推流端会实现一个视频直播 Demo&#xff0c;当然在做 Demo 之前会介绍音视频的基础知识。以下是本系列文章的目录&#xff1a; Android 音视频基础知识 Android 音…

第二代增强-创建采购申请时的增强

文章目录 第二代增强-创建采购申请时的增强业务要求实现过程创建项目编写代码激活增强 维护消息类运行效果断点关键点另一种形式的错误提示-出口函数EXIT_SAPLMEREQ_005运行结果 第二代增强-创建采购申请时的增强 业务要求 实现过程 创建项目 编写代码 "AFNAM&#xff0c…

STM32 PWM波定时溢出中断

打开定时器和中断 主函数初始化开启PWM和中断 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Pwm_data); HAL_TIM_Base_Start_IT(&htim2); 回调函数中判断是否为tim2 void HAL_TIM_PeriodElapsedCallback(TIM_Han…

prometheus+grafana的安装与部署及优点

一、Prometheus 的优点 1、非常少的外部依赖&#xff0c;安装使用超简单&#xff1b; 2、已经有非常多的系统集成 例如&#xff1a;docker HAProxy Nginx JMX等等&#xff1b; 3、服务自动化发现&#xff1b; 4、直接集成到代码&#xff1b; 5、设计思想是按照分布式、微服…

【区块链】比特币架构

比特币架构 2009年1月&#xff0c;在比特币系统论文发表两个月之后&#xff0c;比特币系统正式运行并开放了源码&#xff0c;标志着比特币网络的正式诞生。通过其构建的一个公开透明、去中心化、防篡改的账本系统&#xff0c;比特币开展了一场规模空前的加密数字货币体验。在区…

Linux学习之Tcp与Udp

目录 UDP Udp协议的格式 UDP的传输特性 UDP的缓冲区 基于UDP的应用层协议 TCP协议 TCP的报文格式 1.ACK确认应答机制 2.超时重传 3.TCP的链接管理机制 为什么要三次握手呢&#xff1f; 理解TIME_WAIT状态 流量控制&#xff08;可靠性效率&#xff09; 滑动窗口 拥塞…

深度学习中的注意力机制二(Pytorch 16)

一 Bahdanau 注意力 通过设计一个 基于两个循环神经网络的编码器‐解码器架构&#xff0c;用于序列到序列学习。具体来说&#xff0c;循环神经网络编码器将长度可变的序列转换为固定形状的上下文变量&#xff0c;然后循环神经网络 解码器根据生成的词元和上下文变量按词元生成…

【iOS】KVO

文章目录 前言一、KVO使用1.基本使用2.context使用3.移除KVO通知的必要性4.KVO观察可变数组 二、代码调试探索1.KVO对属性观察2.中间类3.中间类的方法3.dealloc中移除观察者后&#xff0c;isa指向是谁&#xff0c;以及中间类是否会销毁&#xff1f;总结 三、KVO本质GNUStep窥探…

IDEA基于Maven构建项目

IDEA基于Maven构建项目 一、Maven简介 Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型的概念&#xff08;POM&#xff09;&#xff0c;Maven 可以从中心信息中管理项目的构建、报告和文档。 Apache Maven 可以用于构建和管理任何基于 Java 的项目。 下载地址…

EPAI手绘建模APP颜色、贴图、材质、样式

⑦ 颜色选择页面 1) 颜色环选色。 图 65 颜色选择器-颜色环 2) RGB选色。 图 66 颜色选择器-RGB 3) HSL选色。 图 67 颜色选择器-HSL 4) 国风颜色库选色。 图 68 颜色选择器-国风 5) CSS颜色库选色。 图 69 颜色选择器-CSS 6) 历史颜色&#xff1a;保存最近使用的多个颜色&…

OpenCV如何使用 GDAL 读取地理空间栅格文件(72)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目录 目标 代码&#xff1a; 解释&#xff1a; 如何使用 GDAL 读取栅格数据 注意 …

ElasticSearch自动补全

一、拼音分词器&#xff1a; 当用户在搜索框输入字符时&#xff0c;我们应该提示出与该字符有关的搜索项&#xff0c;如图&#xff1a; 这种根据用户输入的字母&#xff0c;提示完整词条的功能&#xff0c;就是自动补全了。 GET /_analyze {"text":"我爱螺蛳粉…

.Net MAUI 搭建Android 开发环境

一、 安装最新版本 VS 2022 安装时候选择上 .Net MAUI 跨平台开发 二、安装成功后,创建 .Net MAUI 应用 三、使用 VS 自带的 Android SDK 下载 ,Android镜像、编译工具、加速工具 四、使用Vs 自带的 Android Avd 创建虚拟机 五、使用 Android 手机真机调试

【小菜鸟之---Ansible基础详解】

文章目录 1 【Ansible简介】1.1简介1.2 Ansible 特点1.3 Ansible的工作机制1.4Ansible任务工作模式 2【安装部署】2.1安装命令2.2 Ansible配置文件2.3主机清单配置2.4 基于ssh免密登录2.5常用命令 3【Ansible常用模块】3.1 ping模块3.2 shell模块3.3 command模块3.4 copy模块3.…

百度下拉框负面信息如何删除?

百度头条360等搜索引擎&#xff0c;作为人们获取信息的主要途径之一。然而&#xff0c;一些知名的企业或个人可能会面临在搜索的下拉框中出现负面信息的问题&#xff0c;这可能对其声誉和形象造成不良影响。小马识途营销顾问根据自身从业经验&#xff0c;针对这类情况提出以下建…