第三章Java的基本程序结构(2)

3.6输入与输出

3.6.1读取输入
构建"标准输入流"System.in关联的Scanner对象
Scanner in = new Scanner(System.in);
nextLine() 读取输入的下一行内容。
next() 读取输入的下一个单词,空格为分隔符
nextDouble() 读取并转换下一个表示整数或浮点数的字符序列
hasNext() 检测输入中是否还有其他单词
hasInt() 检测输入中是否还有下一个表示整数的字符序列

3.6.2格式化输入
每个以%字符开始的格式说明符都用相应的参数替换,f为浮点数,s为字符串,d为十进制整数。

转换符
类型
举例
d
十进制整数
159
x
十六进制整数
9f
o
八进制整数
237
f
定点浮点数
15.9
e
指数浮点数
1.59e+01
g
通用浮点数
_____
a
十六进制浮点数
0x1.fccdp3
s
字符串
Hello
c
字符
H
b
 
布尔
True
h
散列码
42628b2
tx或Tx
日期时间(T强制大写)
已经过时,应该改为使用java.time;类
%
百分号
%
n
与平台有关的行分隔符
___
 
 
 
3.6.3文件输入与输出 读取文件,需要构造Scanner对象:
Scanner sc= new Scanner(Path.of("myfile.txt"),StandardCharsets.UTF_8);

如果文件名包含反斜杠符号,需要每个反斜杠前额外加一个\转译。
如果文件不存在,创建该文件。

3.7控制流程

3.7.1块作用域
一对大括号是一个块,一个块可以嵌套另一个块中,但是不能在两个块中声明同名的变量。

3.7.2条件语句

if 、while、for、switch、增强for循环、
case标签,break:跳出循环体、continue:跳到循环首部,执行下一个"更新"。

3.8大数
BigInteger:实现任意精度的整数运算
BigDeciml:实现任意精度的浮点数运算
静态方法valueOf可以将普通的数值转换为大数

package com.Test;

import java.math.*;
import java.util.*;


/**
 * @Author xcf
 * @Company
 * 抽奖活动,从490个可能数值中抽取60个,并处理大数,返回中奖的概率
 */
public class BigIntegerTest {
    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();

        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);
    }
}

3.9数组
3.9.1声明数组

int[] a;//声明了变量a,没有将a初始化为一个真正的数组。
int[] b = new int[100]//声明并初始化了一个可以存储100个整数的数组
int[] c = {2,3,4,5,7,11,13}//枚举数组

3.9.2访问数组元素

数组元素的下标从0 ~ n-1。
获取数组元素个数:array.length(如:a.length)

3.9.3for each循环

增强for循环的语句格式:for(元素类型 元素名 : 数组或实现了Iterable接口的类对象名[如ArrayList])
增强for循环是遍历数组中的每个元素,而不是下标值。

3.9.4数组拷贝

int[] a = b;
a[5] = 12;//地址拷贝,而不是值拷贝。

int[] c = Arrays.copyOf(a,a.length)
//将a数组的所有值拷贝到新的数组中,第二个参数是新数组的长度,超出用0或false填充。小于则拷贝前面的值

3.9.5数组排序

static void sort(xxx[ ] a) 使用快速排序算法进行升序排序,

static int binarySearch(xxx[ ] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。

static String to String(xxx[ ] a)
static xxx[] copyOf((xxx[ ] a,int end)
static boolean equals(xxx[ ] a, xxx[ ] a2)
static void fill(xxx[] a, xxx v)

package com.Test;

import java.util.*;

/**
 * @Author xcf
 * @Company
 * 抽彩游戏:随机数,从n个数字抽取k个,进行排序然后输出
 */
public class LotteryDrawing {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        System.out.println("请输入抽取个数:");
        int k = in.nextInt();
        System.out.println("请输入随机数最大值:");
        int n = in.nextInt();

        int[] numbers =new int[n];
        for (int i = 0; i < numbers.length ; i++) {
            numbers[i] = i+1;
        }//把1到n-1数放入数组numbers里

        int[] result = new int[k];
        for (int i = 0; i < result.length ; i++) {

            //随机生成数*n 赋值给r
            int r = (int) (Math.random() * n);
            //把numbers数组下标为r的数赋值给result[i]
            result[i] = numbers[r];
            //把numbers数组最后一个数覆盖numbers[r]
            numbers[r] = numbers[n-1];
            //删除最后一个数
            n--;
        }

        //sort方法使用了快速排列,进行递增排序。
        Arrays.sort(result);
        for (int r : result) {
            //循环打印result数组
            System.out.println(r);
        }
    }
}

3.9.6多维数组
Java实际上没有多维数组,只有一维数组,多维数组就是"数组的数组"
声明一个二维数组:double[ ] [ ] a;
要进行初始化才能使用:a = new double[ i ][ j ];

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值