Java中的“scanf()、cin()、input()"
最近在写一个Java程序时遇到一个问题,就是如何在Java里面输入数值,又叫做获取键盘输入值。
因为c语言里面有scanf(),C++里面有cin(),python里面有input()。Java里面有三种方法:
First:从控制台接受一个字符并打印
1 2 3 4 5 6 7 8 9 | import java.io.*; import java.io.IOException; public class test { public static void main(String args[]) throws IOException{ char word = ( char )System.in.read(); System.out.print( "Your word is:" + word); } } |
这种方式只能在控制台接受一个字符,同时获取到的时char类型变量。另外补充一点,下面的number是int型时输出的结果是Unicode编码。
1 2 3 4 5 6 7 8 9 | import java.io.*; import java.io.IOException; public class test { public static void main(String args[]) throws IOException{ int number = System.in.read(); System.out.print( "Your number is:" + number); } } |
Second:从控制台接受一个字符串并将它打印出来。这里面需要使用BufferedReader类和InputStreamReader类。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class test { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = null ; str = br.readLine(); System.out.println( "Your value is :" + str); } } |
通过这个方式能够获取到我们输入的字符串。这里面的readLine()也得拿出来聊一聊。
Third:使用Scanner类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.util.Scanner; public class CSU1726 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println( "请输入你的姓名:" ); String name = sc.nextLine(); System.out.println( "请输入你的年龄:" ); int age = sc.nextInt(); System.out.println( "请输入你的工资:" ); float salary = sc.nextFloat(); System.out.println( "你的信息如下:" ); System.out.println( "姓名:" +name+ "\n" + "年龄:" +age+ "\n" + "工资:" +salary); } } |
这段代码已经表明,Scanner类不管是对于字符串还是整型数据或者float类型的变量,它都能够实现功能。
But:上面这个方法要注意的是nextLine()函数,在io包里有一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import java.util.Scanner; public class CSU1726 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println( "请输入你的年龄:" ); int age = sc.nextInt(); System.out.println( "请输入你的姓名:" ); String name = sc.nextLine(); System.out.println( "请输入你的工资:" ); float salary = sc.nextFloat(); System.out.println( "你的信息如下:" ); System.out.println( "姓名:" +name+ "\n" + "年龄:" +age+ "\n" + "工资:" +salary); } |
上面两段代码主要区别在于,这段代码先执行nextInt()再执行nextLine(),而第三种方法的例子是相反的。当你在运行着两段代码的时候你会发现第三种方法的例子可以实现正常的输入,而这段代码却在输入年龄,敲击enter键后,跳过了输入姓名,直接到了输入工资这里,(可以自己运行代码看看)。
这背后的原因是,在执行完nextInt()函数之后,敲击了enter回车键,回车符会被nextLine()函数吸收,实际上是执行了nextLine()函数吸收了输入的回车符(并不是没有执行nextLine函数),前面讲到和nextLine()功能一样的函数next(),他们的区别就在于:next()函数不会接收回车符和tab,或者空格键等,所以在使用nextLine()函数的时候,要注意敲击的回车符是否被吸收而导致程序出现bug。
最后的总结:next()和nextLine()的区别
在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~