> 文档中心 > java学习第四天(输入输出)

java学习第四天(输入输出)


1:输入

基本操作

导入包:import java.util.*;
构造Scanner对象:Scanner in=new Scanner(System.in);//in可更改
常用数据类型的输入:(1):int num=in.nextInt();
(2):short num=in.nextShort();
(3):byte num=in.nextByte();
(4):long num=in.nextLong();
(5):double num=in.nextDouble();
(6):float num=in.nextFloat();
(7):String str=in.nextLine();
(8):boolean bool=on.nextBoolean()

2:输出

三种输出

三个输出函数:

  (1):System.out.println();//打印结束后换行   (2):System.out.print();//打印结束不换行   (3):System.out.printf();//格式化输出

println()和print()没什么好说的,这里主要介绍printf()

格式化说明符

首先认识一下格式说明符:
%d 十进制整数
%x 十六进制整数
%o 八进制整数
%f 定点浮点数
%e 指数浮点数
%g 通用浮点数
%a 十六进制浮点数
%s 字符串
%c 字符
%b 布尔值
%h 散列码
%tc 日期时间
%% 百分号
%n 与平台有关的行分隔符

我们可能对%d %c %s 很熟悉,%o %b %% 也可以理解,可是什么叫定点浮点数呢,接下来看一看定点数和浮点数的概念
定点数:定点小数是计算机处理的数值数据多数带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数
浮点数:浮点数,是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。
我认为可以简单地理解为,定点数是精确具有确定值的数,而浮点数是不确定的数,你不知道计算机中到底是什么值,比如两个double数相减4.0-3.11,计算机中计算存储的结果可能就不是0.89,而是其他值。
而定点浮点数我认为就是固定截取几位作为值,代码示例如下

public class Demo9 {    public static void main(String[] args) { double x=4.0; double y=2.11; System.out.println(x-y); System.out.printf("%f",x-y);//定点浮点数 System.out.printf("%g",x-y);//通用浮点数    }    //运行结果    //1.8900000000000001    //1.890000    //1.89000}

可以看到,定点浮点数截取小数点后六位通用浮点数截取小数点后五位

指数浮点数呢,当然是用指数形式,或者准确点数,用科学计数法表示浮点数

public class Demo10 {    public static void main(String[] args) { System.out.printf("%e\n",22222.3); System.out.printf("%e",0.023);    }    //运行结果    //2.222230e+04    //2.300000e-02}

十六进制浮点数呢,先以代码为例

public class Demo11 {    public static void main(String[] args) { System.out.printf("%a\n",16.16); System.out.printf("%f",0x1.028f5c28f5c29p4);    }    //运行结果    //0x1.028f5c28f5c29p4    //16.160000}

相信读者看到结果一定很蒙,我也很蒙
首先我们要知道十进制的16.16的十六进制表示是多少,经计算是10.28F5C("28F5C"循环)近似为10.28F5C28F5C29,p4什么意思呢,2的4次方的16,1.028f5c28f5c29(16进制)乘16 (十进制)的结果就是10.28F5C("28F5C"循环)

%n就是格式化输出中的换行,适用于不同平台

%tc 可以用于输出当前时间,代码格式如下

import java.util.*;//不要忘了导入包public class demo1 {    public static void main(String[] args) { System.out.printf("%tc",new Date());    }    //运行结果    //周五 5月 06 18:27:35 CST 2022}

还剩下最后一个散列码 %h,好吧,这个我查了资料,两个字,不会,太难,起码现在没有事无巨细了解的必要。这里就不介绍了,毕竟我也不会,哈哈。
当然,printf()不止有这些,还有一些额外的格式控制以及时间和日期转换符,下面以代码示例一些常用的

public class Demo3 {    public static void main(String[] args) { int num1=5; int num2=-5; //打印数字符号 System.out.printf("%+d %+d\n",num1,num2); //设置域宽 System.out.printf("%5d\n",num1); //左对齐 System.out.printf("%-5d%-5d\n",num1,num2); //添加分组分隔符 System.out.printf("%,d",1111111111);    }    //运行结果    //+5 -5    //    5    //5    -5    //1,111,111,111}

本次输入输出就了解到这里,如有错误,望指正