java学习(四) 基本程序设计结构(三)——输入输出、控制流程、大数值、数组

输入输出(通过控制台)

读取“标准输入流”:

1.构建Scanner对象(定义在java.util包中),并与“标准输入流”System.in关联:
Scanner in = new Scanner(System.in);
2.使用Scanner类的各种方法实现输入操作,如nextLine方法(输入行中可以有空格):
String aLine = in.nextLine;
想要读取一个单词(以空白符为分隔符),调用next方法;
想要读取一个整数,调用nextInt方法;浮点数同理;
boolean hasNext()检测输入中是否还有其他单词。

格式化输出:

java SE 5.0沿用了C语言库函数中的printf方法:
System.out.printf("Hello, %s. Next year, you 'll be %d", name ,age);
System.out.printf("%fc", new Date()); 这条语句将完整打印当前的日期和时间。

用于printf的转换符、用于printf的标志、日期和时间的转换符等信息查阅书本(p57-p60)。

文件输入与输出:

要想对文件进行读取,需要用File对象构建一个Scanner对象:
Scanner in = new Scanner(Paths.get("myfile.txt"));
如果文件名中包含反斜杠符号,要在每个反斜杠之前再加一个额外的反斜杠,例如:“c:\mydirectory\myfile.txt”。之后用前面介绍的Scanner类的方法对文件进行读取。
如果用一个不存在的文件构建一个Scanner,或者用一个不能被创建的文件名构造一个PrintWriter,就会发生异常。

要想写入文件,需要构建一个PrintWriter对象。在构造器中,只需要提供文件名:
PrintWriter out = new PrintWriter("myfile.txt");
如果文件不存在,创建该文件。可以像输出到System.out一样使用print、println、printf命令。

控制流程

多重选择:switch语句

switch(choice){ case 1: ... break; case 2: ... break; default: ... break; }
如果在case分支语句的末尾没有break语句,就会接着执行下一个case分支语句。

for each循环

for(variable:collection) statement定义一个变量用于暂存集合中的每一个元素,并执行相应语句。例如:
for(int element:a) System.out.println(element); //打印数组a的每一个元素,一个元素占一行。
遍历数组中的每个元素时,for each循环语句的循环变量不需要使用下标值。
想要访问二维数组a的所有元素,需要使用两个嵌套的循环。

中断控制流程语句

java提供了一种带标签的break语句,用于跳出多重嵌套的循环语句。标签必须放在希望跳出的最外层循环之前,并且必须紧跟着一个冒号。示例为if语句:
label: { ... if(condition) break label; //exits block ... }

continue语句将控制转移到最内层循环的首部。如果将continue语句用于for循环中,就可以跳到for循环的“更新”部分。

大数值

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个类:BigInteger和BigDecimal。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
使用静态的valueOf方法可以将普通的数值转化为大数值:
BigInteger a = BigInteger.valueOf(100);
处理大数值不能用运算符,而需要使用大数值类中的add和multiply方法:
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); //d = c * (b+2)

数组

和C++不同,java中习惯在声明时把数组类型和变量名分开,如:int[] a;
在java中,允许数组长度为0(与null不同)。

数组拷贝

在java中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组:
int[] a = b;
a[4] = 12; //now b[4] is also 12
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法。

命令行参数

每一个java应用程序都带有一个带String arg[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数。

Arrays类的常用方法

static void sort(type[] a) 采用优化的快速排序算法对数组进行排序。
static int binarySearch(type[] a, int start, int end, type v) 采用二分搜索算法查找值v(与a的数据元素类型相同)。如果查找成功,则返回相应的下标值;否则,返回一个负数值r。-r-1是为保持a有序v应插入的位置。
static boolean equals(ttype[] a, type[] b) 如果两个数组大小相同,并且下标相同的元素都对应相等,返回true。

多维数组

java实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。因此,java中可以构建“不规则”数组。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • K# Java核心技术卷一 逐一声明每一个变量可以提高程序的可读性。 在Java中,变量的声明尽可能地靠近变量第一...
    兰陵忧患生阅读 443评论 0 1
  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,339评论 0 10
  • 之前一直不清楚 valueForKeyPath的用法,后面在项目中使用到了,再发现valueForKeyPath原...
    小明的知识库阅读 2,386评论 0 49
  • 这个周六(12月14号)晚参加了自控力的上海面基会,收获之大感觉像中了1个亿。想来当初肖爷发布面基召集令的时候,自...
    MiniKay阅读 123评论 2 4