开篇前吐槽一点,java 的输入输出真的是值得被诟病的一点,比之其他常用语言难搞数倍不止,对于像我一样的小白十分不友好。
本小白通过查阅大量他人经验,总结了如下两种方式,以例题说代码,仅供大家参考:
1: 基于java.ol.* (用于输入用空格来分隔的数组(比较实用或常见于字符数组)),以下通过一道经典题来做例子:(BufferedReader)
//题:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数.
package secondhomework; //包名
import java.io.*; //此方法要导入的库
public class work7 {
public static void main(String[] args) throws IOException //注意此处的申明
{
BufferedReader hh=new BufferedReader(new InputStreamReader(System.in));//关键语句
System.out.print("请输入字符串:");
String str=hh.readLine();//关键语句
//System.out.println(str.length()); //这个地方用于检验是否读入了包含了空格的所有字符
int num=0,ch=0,ot=0,bl=0;
for(int i=0;i<str.length();i++)//str.toCharArray()[i]将str转化为字符数组取到第i个字符元素
{
if(str.toCharArray()[i]>='A'&&str.toCharArray()[i]<='Z'||str.toCharArray()[i]>='a'&&str.toCharArray()[i]<='z')
{
ch++;
}
else if(str.toCharArray()[i]>='0'&&str.toCharArray()[i]<='9')
{
num++;
}
else if(str.toCharArray()[i]==' ')
{
bl++;
}
else
{
ot++;
}
}
System.out.println("字母有:"+ch+" 数字有:"+num+" 空格符有:"+bl+" 其他字符有:"+ot);
}
}
当然也许有更简单的方法,但是我没找到过一种具体可行的完整方法,此方法是我读了8篇博客拼凑起来的。
2:基于java.util.* (常用于以非空格为间隔符的数组输入)一下同样通过一道例题来展示:(Scanner)
/*题:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。*/
package secondhomework; //包名
import java.util.*; //要导入的库
public class work8 {
public static void main(String[] args)
{
System.out.print("输入一组数:");
Scanner hh=new Scanner(System.in);
String str1=hh.next().toString(); //个人理解是把输入转化为字符串类型
String[] arr=str1.split(","); //关键步!以“,”符为分隔构造字符串数组,其中的每个元素就是我们实际要实用的数据(此时它们全部是字符类型)
int n=arr.length; //获取数据的个数
int[] x=new int[n];int flog=0; //申请长度为n的数组
for(int i=0;i<n;i++)
{
x[i]=Integer.parseInt(arr[i]);//!关键步:将所有的字符元素转化为整数型,本人认为此步可以不写,直接用Integer.parseInt(arr[i])进行操作即可,这里用于更直观的展示
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1;j++)
{
if(i!=j&&x[i]+x[j]==x[n-1])
{
System.out.println(x[i]+" "+x[j]);
flog=1;
break;
}
}
if(flog==1)
{
break;
}
}
if(flog==0)
{
System.out.println("数组中没有两个数之和等于"+x[n-1]);
}
//System.out.print(n);
}
}
3:注意项:
- 细心的朋友都有发现本文的一个强调点是“是否以空格为分隔符”,这是因为,本人试过在除了使用第一种方法的其他方法,往往一遇到空格就会停止往后继续读入,至于为什么我也没研究(如果有朋友知道希望可以告知)。
- 以上两种方法的优点是,直接将数组从控制台输入,之后再获取它的大小,不会造成空间浪费。
- 个人觉得以上两种方法还可以进行拼凑,具体到实际情况灵活运用,不要盲目套用。
4:多维数组的输入:
例题:实现两个矩阵的相加。
2 3 5 3 5 6 5 8 11
3 1 6 + 1 2 4 = 4 3 10
2 6 7 2 4 6 4 10 13
package thethirdwork;
import java.util.*;
public class work5 {
public static void main(String[] args)
{
System.out.print("输入数组的行列:");
Scanner hh=new Scanner(System.in);
int h=hh.nextInt(),l=hh.nextInt();
int[][] ew1=new int[h][l];
int[][] ew2=new int[h][l];
hh.nextLine();//这行代码我觉得是关键,作用是吃掉输入中的回车符
for(int i=0;i<h;i++)
{
for(int j=0;j<l;j++)
{
ew1[i][j]=hh.nextInt();
}
}
hh.nextLine();
for(int i=0;i<h;i++)
{
for(int j=0;j<l;j++)
{
ew2[i][j]=hh.nextInt();
}
}
for(int i=0;i<h;i++)
{
for(int j=0;j<l;j++)
{
ew1[i][j]=ew1[i][j]+ew2[i][j];
System.out.print(ew1[i][j]+" ");
}
System.out.println();
}
hh.close();
}
}
注意点:本方法的缺点很直观,他无法从控制台直接输入多维数组,而是要先手动去键入它的行与列。