java的输入方法最常见的就是Scanner的方法,我经过查阅一些资料发现了输入方法原来还有那么多种,可以玩出不少花样,下面是我总结出的四种输入方式,有需要的可以拿去
Scanner的输入方法是最常见的一种,也是小编在此最推荐的一种,固定格式如下:
import java.util.Scanner; public class TestDemo1007_4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); System.out.println(a); } }而这里的“int a = scanner.nextInt();"表示从键盘输入的是一个整数,但如果想输入字符串就需要下面这样写:
Scanner scanner = new Scanner(System.in); String a = scanner.next(); System.out.println(a);这个时候我们想要输入字符串,就可以顺利读出了,这是运行结果: 但是,如果我们想一次性读取多个字符串,就像这样输入,我们发现了问题: 输入多个字符串之后,只输出了第一个空格之前的字符,一旦遇到了空格就停止读取了,那么如果在这种情景下,scanner.next()就行不通了,需要用:
Scanner scanner = new Scanner(System.in); String a = scanner.nextLine(); System.out.println(a);这样问题就解决了,可以顺利输出全部字符。
个人认为这种输入方法与上面的方法比起来可能是少了一些存在的必要性,但是存在就一定有合理之处,下面是几种使用方法:
解释一 public static void main(String[] args) throws IOException { char c; System.out.print("Please input a char:"); c = (char) System.in.read(); //从标准输入读入u一个字节的信息,并返回一盒字符型变量 System.out.println("Receive char =" + c); }(值得注意的是:当使用System下的read方法来进行输入时,需要处理一个异常,否则会飘红。) 以上代码可以从键盘中读取一个字符,但是只能读取第一个,不管输入多少,只能读取第一个,输出结果如下图:
2.解释二 使用这种方法进行输入时,会因为你的键盘输入习惯等问题对结果造成影响,而且,返回值始终为ASCⅡ码(有点头疼!)
public static void main(String[] args) throws IOException { System.out.println("请输入:"); int i =0; while (true){ i = System.in.read(); System.out.println(i); } }以上代码的运行情况如下: 所以就像输出结果说的,我们的空格。回车等操作也会被翻译成ASCⅡ码打印出来。
下面是计算输入了多少个字符的代码; public static void main(String[] args) throws IOException { byte[] b = new byte[5]; while (true){ int len = System.in.read(b); System.out.println("读取字节数:" + len); for (int i = 0; i < len ; i++) { System.out.print(b[i] + "\t"); //返回的是字节数,由于read的特性,如果输入12加(空格)加(回车)那就是四个字符, } } }输出结果为:
说白了就是使用以下语句:
DataInputStream din = new DataInputStream(System.in);
和Scanner的用法差不多,下面是它的具体用法,代码如下:
public static void main4(String[] args){ double x = 0, y = 0; DataInputStream din = new DataInputStream(System.in); try { System.out.println("输入x的数值:"); x = Double.parseDouble(din.readLine()); System.out.println("输入y的数值:"); y = Double.parseDouble(din.readLine()); System.out.println("x的数值:" + x + "; y的数值:" + y); System.out.println("x + y = "+ (x+y)); }catch (Exception e){ System.out.println("错误!!"); } }输出结果如下:
这一种输入方法和之前三种输入输出的形式都有所不同,他是会在执行操作的时候,弹出一个弹框,所有的输入输出都需要从弹框中输入显示。
1.显示输入消息框,可以输入数据
String str1 = JOptionPane.showInputDialog(“输入消息框”,“0”);
2.显示出一个弹框 null表示对话框显示在屏幕中间 第二个参数表示要显示的字符结果
JOptionPane.showMessageDialog(null,str1); JOptionPane.showMessageDialog(null,“a + b =” + c);
一个很简单的代码,用来做加减乘除运算:
public static void main(String[] args) { double a,b; String str1 = JOptionPane.showInputDialog("输入a的值","0"); //由于这个方法输入的格式为字符型,所以我们要转换成整型 a = Integer.parseInt(str1); String str2 = JOptionPane.showInputDialog("输入运算符号","+"); String str3 = JOptionPane.showInputDialog("输入b的值","0"); b = Integer.parseInt(str3); double c = 0; if (str2.equals("+") ){ c = a + b; } if (str2.equals("-")){ //或者是str.contains("-") c = a - b; } if (str2.equals("*") ){ c = a * b; } if (str2.equals("/") ){ c = a / b; } JOptionPane.showMessageDialog(null, c); }输出如下:
这种输入和输出格式很新颖,很快引起了小编的注意,但这种方法也存在他自己的局限性
综上:最建议使用的方法还是Scanner
那么我将利用四种输入方法编写一个很简单的程序: 实现三个数排序、最大值、最小值、平均值的计算
(由于只有主函数部分有差异,所以下面是四种主函数的写法,其余的函数在后面有附上)
方法一:Scanner public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); System.out.println("请输入三个数:"); int a = scanner.nextInt(); int b = scanner.nextInt(); int c = scanner.nextInt(); int[] order = OrderNum(a,b,c); int max = MaxNum(a,b,c); int min = MinNum(a,b,c); double ave = AveNum(a,b,c); System.out.println("最大值为:" + max); System.out.println("最小值为:" + min); System.out.println("平均值为:" + ave); System.out.println("由大到小的顺序为;" + Arrays.toString(order)); } 方法二:System public static void main(String[] args) throws IOException { System.out.println("请输入三个数:"); int a = System.in.read(); int b = System.in.read(); int c = System.in.read(); int[] order = OrderNum(a,b,c); int max = MaxNum(a,b,c); int min = MinNum(a,b,c); double ave = AveNum(a,b,c); System.out.println("最大值为:" + (max-48)); System.out.println("最小值为:" + (min-48)); System.out.println("平均值为:" + (ave-48)); System.out.println("由大到小的顺序为;" + Arrays.toString(order)); } 方法三:命令行 public static void main(String[] args) throws IOException { DataInputStream din = new DataInputStream(System.in); System.out.println("请输入三个数:"); int a = Integer.parseInt(din.readLine()); int b = Integer.parseInt(din.readLine()); int c = Integer.parseInt(din.readLine()); int[] order = OrderNum(a,b,c); int max = MaxNum(a,b,c); int min = MinNum(a,b,c); double ave = AveNum(a,b,c); System.out.println("最大值为:" + max); System.out.println("最小值为:" + min); System.out.println("平均值为:" + ave); System.out.println("由大到小的顺序为;" + Arrays.toString(order)); } 方法四:JOptionPane public static void main(String[] args) { System.out.println("请在对话框中输入三个数:"); String str1 = JOptionPane.showInputDialog("输入第一个数的值","0"); int a = Integer.parseInt(str1); String str2 = JOptionPane.showInputDialog("输入第二个数的值","0"); int b = Integer.parseInt(str2); String str3 = JOptionPane.showInputDialog("输入第三个数的值","0"); int c = Integer.parseInt(str3); int[] order = OrderNum(a,b,c); int max = MaxNum(a,b,c); int min = MinNum(a,b,c); double ave = AveNum(a,b,c); JOptionPane.showMessageDialog(null, "三个数的最大值为:" + max); JOptionPane.showMessageDialog(null, "三个数的最小值为:" + min); JOptionPane.showMessageDialog(null, "三个数的平均值为:" + ave); JOptionPane.showMessageDialog(null, "三个数由大到小为:" + Arrays.toString(order)); }附: 下面是公用函数部分:
private static int[] OrderNum(int a, int b, int c) { int tmp = 0; if (a < b){ tmp = a; a = b; b = tmp; } if (a < c){ tmp = a; a = c; c = tmp; } if (b < c){ tmp = b; b = c; c = tmp; } int[] nums ={a, b, c}; return nums; } private static int MaxNum(int a, int b, int c) { int tmp = 0; if (a < b){ tmp = a; a = b; b = tmp; } if (a < c){ tmp = a; a = c; c = tmp; } if (b < c){ tmp = b; b = c; c = tmp; } return a; } private static int MinNum(int a, int b, int c) { int tmp = 0; if (a < b){ tmp = a; a = b; b = tmp; } if (a < c){ tmp = a; a = c; c = tmp; } if (b < c){ tmp = b; b = c; c = tmp; } return c; } private static double AveNum(int a, int b, int c) { int sum = a + b + c; return (double)sum/3; }