Java入门输入提升:数组与字符数组以及多维数组的输入

开篇前吐槽一点,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();
	}
}

注意点:本方法的缺点很直观,他无法从控制台直接输入多维数组,而是要先手动去键入它的行与列。

 

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值