System.in.read()

 用读取键盘输入必须构建     
  1。输入流   System.in;     
  2。字符输入流   InputStreamReader     
  3。缓存输入流   BufferedReader     
  4。缓存输入流方法   readLine()//中文意思:读一行(遇上enter键)     
  代码:BufferedReader   reader=new   BufferedReader(new   InputStreamReader(System.in));
System.in.read()返回一个整型字节数据,该数据表示的是字节,因此是Unicode的第一个字节或是字符的ASCII码值。该方法是从一个 流中一个一个的读取数据,因此是一个迭代的过程。我们可以看出in是一个静态的流,因此在该程序中只有一个流,重复调用System.in.read() 实际上是在遍历该流中的每一个字节数据。最常见的流是键盘输入流。我们可以在键盘中输入一个字符串(其中按下回车键代表了两个字符\r\n,\r的 ASCII码值是10,\n是13)。我们可以重复调用System.in.read()来读取从键盘输入的字符串中的字符所代表的字节(ASCII 值)。
public final class System extends Object
System 类包含一些有用的类字段和方法。它不能被实例化。 
在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。 
public static final InputStream in 
“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。 
read
public abstract int read()
                  throws IOException
从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
子类必须提供此方法的一个实现。 
返回: 
下一个数据字节;如果到达流的末尾,则返回 -1。 
抛出: 
IOException - 如果发生 I/O 错误。
________________________________________
read
public int read(byte[] b)
         throws IOException
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。 
如果 b 的长度为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。
将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中,依次类推。读取的字节数最多等于 b 的长度。设 k 为实际读取的字节数;这些字节将存储在 b[0] 到 b[k-1] 的元素中,不影响 b[k] 到 b[b.length-1] 的元素。
类 InputStream 的 read(b) 方法的效果等同于:
 read(b, 0, b.length) 
参数: 
b - 存储读入数据的缓冲区。 
返回: 
读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1。 
抛出: 
IOException - 如果不是因为流位于文件末尾而无法读取第一个字节;如果输入流已关闭;如果发生其他 I/O 错误。 
NullPointerException - 如果 b 为 null。 
另请参见: 
read(byte[], int, int)
________________________________________
read
public int read(byte[] b,
                int off,
                int len)
         throws IOException
将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。 
在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。 
如果 len 为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。
将读取的第一个字节存储在元素 b[off] 中,下一个存储在 b[off+1] 中,依次类推。读取的字节数最多等于 len。设 k 为实际读取的字节数;这些字节将存储在 b[off] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1] 的元素。
在任何情况下,b[0] 到 b[off] 的元素以及 b[off+len] 到 b[b.length-1] 的元素都不会受到影响。 
类 InputStream 的 read(b, off, len) 方法重复调用方法 read()。如果第一次这样的调用导致 IOException,则从对 read(b, off, len) 方法的调用中返回该异常。如果对 read() 的任何后续调用导致 IOException,则捕获该异常并将其视为到达文件末尾;到达该点时读取的字节存储在 b 中,并返回发生异常之前读取的字节数。在已读取输入数据 len 的请求数量、检测到文件结束标记、抛出异常前,此方法的默认实现将一直阻塞。建议子类提供此方法更为有效的实现。
参数: 
b - 读入数据的缓冲区。 
off - 数组 b 中将写入数据的初始偏移量。 
len - 要读取的最大字节数。 
返回: 
读入缓冲区的总字节数;
如果因为已到达流末尾而不再有数据可用,则返回 -1。 
抛出: 
IOException - 如果不是因为位于文件末尾而无法读取第一个字节;如果输入流已关闭;如果发生其他 I/O 错误。 
NullPointerException - 如果 b 为 null。 
IndexOutOfBoundsException - 如果 off 为负,len 为负,或者 len 大于 b.length - off 
 
import java.io.*; 
public class IO{ 
public static void main(String args[])throws IOException{ 
System.out.println("计算矩形面积"); 
System.out.println("请输入长:"); 
int a,b; 
a=System.in.read(); 
System.out.println("请输入宽"); 
b=System.in.read(); 
System.out.println("计算矩形面积是:"+a*b); 


结果: 
计算矩形面积 
请输入长: 

请输入宽 
计算矩形面积是:637 
问题 没等我输入宽 就直接输出了 637 ?? 
为什么 ? 637 是什么意思?? 
解释一下 system.i.read()
 
最佳答案
System.in.read接收的是字节0-255 
你输入个1以后,其实返回的是ASCII码,也就是49 
然后你又按了个回车,回车的ASCII码是13 
结果相当于 
a=49 
b=13
System.in.read()可以实现输入字符,返回字符的Unicode码,但是缺点是只能输入一个字符,如
public class exec
{
 public static void main( String args[] ) throws Exception
 {
  int i=System.in.read();
  System.out.println(i);
 }
}
如果输入1
输出为49
如果输入123
输出还是49
利用System.in.read()的重载函数可以实现对多个字符的输入,如
public class exec
{
 public static void main( String args[] ) throws Exception
 {
  byte[] barray=new byte[5];
  
  System.in.read(barray);
  
  for(int i=0;i<5;i++)
   System.out.println(barray[i]);
 }
}
如果输入1
输出为
49
13
10
0
0
如果输入12
输出为
49
50
13
10
0
此时可以发现输入的还是Unicode码,但是会多产生很多其他字符,如回车和换行等。
如何进一步将字节数组信息转换成所需类型,需要结合流类进行处理
想输入字符或数字要用输入流如DataInputStream等来协助转换,如:
import java.io.* ;
public class Vs
{
public static void main ( String args[] )
{
double x=0, y=0;
DataInputStream in = new DataInputStream(System.in);
System.out.println( "输入x的数值:" );
try
{
x = Double.parseDouble(in.readLine());
System.out.println( "x的数值:"+ x );
}catch(Exception e)
{
System.out.println( "Wrong!!!!!!!!" );
}
System.out.println( "输入y的数值:" );
try
{
y = Double.parseDouble(in.readLine());
System.out.println( "y的数值:"+ y );
}catch(Exception e)
{
System.out.println( "Wrong!!!!!!!!" );
}
System.out.println( Math.pow(x, y) );
}
}
或:
import java.io.*;
public class Sum{
public static void main(String args[]){
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(reader.readLine());
System.out.println(a);
}
catch(Exception e){
System.out.println(e);
}
}
}
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
其中InputStreamReader是用于象读取字符流一样读取二进制输入流的具体类,在这里将System.in放到InputStreamReader对象之中,然后通过使用BufferedReader对象将其缓冲,提高输入操作的效率。

时间: 2024-10-24 09:28:48

System.in.read()的相关文章

Hive报错 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D

报错信息如下 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D 解决方法: 编辑 hive-site.xml 文件,添加下边的属性 <property> <name>system:java.io.tmpdir<

China Operating System 电脑操作系统 2016全球互联网排名

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 电脑操作系统 China Operating System 2016全球互联网排名 ========

System.out.println与System.err.println的区别

public class Test2 { static { System.out.println("1"); } { System.out.println("2"); } public Test2() { System.out.println("3"); System.err.println("3"); } public static void main(String[] args) { new Test2(); } } Sy

常用工具类(System,Runtime,Date,Calendar,Math)

一.Sy 一个java.lang包中的静态工具类. 三大字段: static PrintStream err "标准"错误输出流. static InputStream in "标准"输入流. static PrintStream out "标准"输出流. 其他常用方法: 描述系统信息: 获取系统属性信息: static Properties getProperties(): (Properties是Hashtable的子类,也就是Map 的子类

Bus System 【dijkstra算法】

Because of the huge population of China, public transportation is very important. Bus is an important transportation method in traditional public transportation system. And it's still playing an important role even now.The bus system of City X is qui

在线考试系统(Online Exam System)--ASP.NET

用户设计 -|学生 -|老师 -|管理员 学生结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|选课中心 -|显示所有老师所开课的信息可进行选课 -|显示自己已选课程 -|在线考试 -|对已选老师开设的课程选择进行考试 -|成绩查询 -|查看自己考试成绩   老师结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|课程管理 -|显示学校开设的课程(老师可选择添加课程) -|显示老师开设的课程 -|考试管理 -|显示老师自己开设的课程 -|对课程添加试题(选择.填

译-BMC Remedy Action Request System权限控制概述

原文链接:Access control overview 说明: BMC Remedy Action Request System是BMC ITSM产品平台,简称AR 或者Remedy,可实现基于ITIL标准的整个IT管理流程的实施定制.该平台可实现多种权限级别的管理,包括人员.组.角色,以及表.字段.行级别等.本文可以用作其他对权限要求比较精细的系统参考. 为了便于理解,部分名词翻译如下: Server:服务器Form (or table):表单Field (or column):字段Acti

-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.chan

第一次使用Maven ,在eclipse中执行pom.xml文件的时候报错. -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match. 参考网上的解决方案: 设一个环境变量M2_HOME指向你的maven安装目录 M2_HOME=D:\Apps\apache-maven-3.3.1 然后在Window->Prefe

F - The Fun Number System(第二季水)

Description In a k bit 2's complement number, where the bits are indexed from 0 to k-1, the weight of the most significant bit (i.e., in position k-1), is -2^(k-1), and the weight of a bit in any position i (0 ≤ i < k-1) is 2^i. For example, a 3 bit

ORA-00119: invalid specification for system parameter LOCAL_LISTENER

重启oracle是提示错误ORA-00119: invalid specification for system parameter LOCAL_LISTENER. 解决方法: 命令查看错误信息:oerr ora 00119 00119, 00000, "invalid specification for system parameter %s" // *Cause: The syntax for the specified parameter is incorrect. // *Ac