【无标题】

六. 输入与输出


6.1 读取输入

  • 在程序最开始添上 import java.util.* (Scanner类定义在util包中)

  • 要通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联

  • 然后,使用Scanner类的各种方法实现输入操作

importjava.util.*;

publicclassInputTest

{

publicstaticvoidmain(String[] args)

{

Scannerin=newScanner(System.in);

// get first input

System.out.println("What is your name?");

Stringname=in.nextLine();

// get second input

System.out.println("How old are you?");

intage=in.nextInt();

//display output on console

System.out.println("Hello,"+name+".next year,you will be "+ (age+1));

}

}


6.3 格式化输出

  • System.out.println();

  • 沿用了C语言库函数中的printf方法,System.out.printf();

  • 使用静态的String.format方法创建一个人格式化的字符串,不输出

6.4 文件的输入与输出

  • 想要对文件进行读取,就需要一个用File对象构造一个Scanner对象

Scannerin=newScanner(Path.get("myfile.txt"));

  • 如果文件名包含反斜杠,需要在每个反斜杠之前再加一个反斜杠

  • 想要写入文件,就需要构造一个PrintWriter对象。在构造器中,只需要提供文件名

PrintWriterout=newPrintWriter("myfile.txt");

  • 如果用一个不存在的文件构造一个Scanner,或者用一个不能被创建的文件名构造一个PrintWriter,那么就会发生异常

  • 这异常比除0更严重

  • 若知道有可能出现这种情况,可以在main方法中用thows子句标记

publicstaticvoidmain(String[] args) throwsFileNotFoundException

{

Scannerin=newScanner(Path.get("myfile.txt"));

...

}

七. 控制流程


7.1 块作用域

  • 块是指由一对花括号括起来的若干条java语句

  • 不能在嵌套的两个块中声明同名的变量

7.2 条件语句

  • if…else if…else

7.3 循环

  • while

  • do…while

  • for

  • 在for语句内部定义一个变量,这个变量就不能在循环体之外使用

7.4 多重选择:switch语句

  • 我们在程序中基本不适用switch语句

7.5 中断控制流程语句

  • 尽管java的设计者保留了goto,但实际上并没有打算在语言中使用它

  • 不带标签的break

while(years<=100)

{

balance+=payment;

doubleinterest=balance*interestRate/100;

balance+=interest;

if(balance>=goal) break;

years++;

}

  • 代标签的break。(标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号)

Scannerin=newScanner(System.in);

intn;

read_data; // 标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号

while(...)

{

for(...)

{

System.out.println("Enter a number >= 0:");

n=in.nextInt();

if(n<0)

breakread_data;

...

}

}

  • continue语句:将中断正常的控制流程。将控制转移到最内层循环的首部。

Scannerin=newScanner(System.in);

while(sun<goal)

{

System.out.print("Enter a number:");

n=in.nextInt();

if(n<0) continue; // continue语句越过当前循环体的剩余部分,立刻跳到循环首部

sum+=n;

}

7.6 大数值

  • BigInteger,BigDecimal可以处理包含任意长度数字序列的数值

  • BigInteger实现任意精度的整数运算

  • BigDecimal实现任意精度的浮点运算

  • 使用静态的valueOf方法可以将普通的数值转换为大数值

BigIntegera=BigInteger.valueOf(100);

  • 使用add,subtract,multiply,divide,mod实现“加”,”减”,“乘”,”除“,”余数“

BigIntegerc=a.add(b); // c = a + b

BigIntegerd=c.multiply(b.add(BigInteger.valueOf(2))); // d = c * (b + 2)

  • int compareTo(BigInteger other):与other相等返回0;大于返回正数;小于返回负数

八.数组


8.1 创建数组

int[] a; // 只是声明了变量a,并没有初始化为真正的数组

int[] a=newint[100]; // 创建了一个可以存储100个整数的数组

  • 数字数组,所有元素都初始化为0

  • boolean数组,所有元素都初始化为false

  • 对象数组,所有元素都初始化为null

  • 一旦创建了数组,就不能再改变它的大小

  • 若要经常扩展,则使用数组列表

8.2 for each循环

  • 格式:for(int element: a) statement;

for(intelement : a)

system.out.println(element);

8.3 数组初始化以及匿名数组

  • 初始化:

int[] smallPrimes= {2,3,5};

  • 匿名数组

newint[] {2,3,5};

  • 重新初始化一个已经声明的数组

smallPrimes=newint[] {1,1,1};

8.4 数组拷贝

  • 允许将一个数组变量拷贝给另一个数组变量,两个变量将引用同一个数组(数组地址相同)

  • 若向拷贝到一个新的数组中,使用copyTo方法

int[] copiedLuckyNumbers=Arrays.copyOf(luckyNumbers,luckyNumbers,length);

  • 可以用此方法增加数组长度(如果是数值型的,多余位置赋值为0)

luckyNumbers=Arrays.copyOf(luckyNumbers,2*luckyNumbers.length);

8.5 命令行参数

8.6 数组排序

  • 可以使用sort方法(使用快排)

  • Math.random方法随机返回0到1之间的浮点数(包含0,不包含1)

intr= (int) (Math.random() *n);

8.7 多维数组

  • 形式与一维数组相同,多了“[]”

  • 想要快速打印多维数组,可以调用System.out.println(Arrays.deepToString(a));

(形式为:[ [ ] , [ ] ,[ ] ] )

8.8 不规则数组

  • 数组每一行都有不同的长度

  • 创建:

  • 首先需要分配一个具有所含行数的数组

  • 分配这些行

int[][] odds=newint[MAX+1][];

for(intn=0;n<odds.length;n++)

odds[n] =newint[n+1];

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值