Java面对对象程序设计实验之“数组字符串和常用类的使用“

  • Post author:
  • Post category:java




一、实验目的


1. 掌握数组的声明、分配空间及初始化 ;

2. 理解多维数组(重点掌握二维);

3. 掌握String类的特点及常用方法的使用 ;

4. 掌握StringBuffer类的特点及常用方法的使用 ;

5. 掌握String类和StringBuffer类的区别 ;

6. 理解equal方法与==的区别;

7. 掌握常用类的使用




二、实验内容及要求




总要求:



(1)实验中类名的定义规则见实验一 要求;


(2)程序中要有相应的注释说明


(3)变量名要见名识意,代码要求规范,左缩进。





题目




1:


定义一个6行6列的二维整型数组,输出该二维数组中的每行和每列的最大值、最小值、和平均值。

(知识点:数组的创建、初始化和元素访问)

要求:(1)数组元素的值随机产生,大小为20值99之间;

(2)输出结果按下面表格的形式输出。每行,每列后面输出和、平均值、最大值和最小值,



其中平均值保留小数点1位。



98


44


55


64


84


27


|


sum


avg


min


max


67


53


75


91


74


64


|


67


64


83


62


39


27


|


81


45


26


98


24


55


|


56


34


64


60


97


32


|


66


39


28


22


77


98


|


——————————–


sum


avg


min


max

实验结果:




题目




2:


有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最

前面的m个数。

(知识点:数组定义和创建、数组遍历、数组元素访问)

例如 1 2 3 4 5 6 7 移动4个就变成4 5 6 7 1 2 3

要求:

(1)n和m的值由用户输入;

(2)每个元素的值由用户输入;

(3)利用Scanner类完成数值的输入。




Scanner input = new Scanner(System.in);





System.out.println(









请输入数组元素的个数









);





int size = input.nextInt( );


实验结果:




题目




3:


有2个多维数组分别是

2


3 4



1


5


2


8


4 6 8


5


9


10


-3


2


7


-5


-18

按照如下方式进行运算。生成一个2行4列的数组。

此数组的第1行1列是2*1+3*5+4*2

第1行2列是2*5+3*9+4*7  第2行1列是4*1+6*5+8*2 依次类推。

(知识点:多维数组定义和创建、数组遍历、数组元素访问)

实验结果:




题目




4:


编写一个Java程序,完成以下功能:

(知识点:String创建和String常用方法的使用,注意查看Java doc API)

(1)声明一个名为school的String对象,内容是

“My school is Xuzhou Institute Of Technology”

(2)打印字符串的长度;

(3)打印字符串的第一个字符和最后一个字符;

(4)打印字符串的第一个单词和最后一个单词;

(5)打印”Xuzhou”在该字符串的起始位置(从0开始编号的位置);

(6)将该字符串转为大写字母输出

实验结果:




题目




5:


编写一个Java程序,完成以下功能:

(知识点:StringBuffer创建和StringBuffer常用方法的使用,注意查看Java doc API)


Java和 JavaScript 虽有都有Java四个字,但它们是完完全全不同的两种东西,Java是由Sun 公司于1995年5月推出的,而JavaScript 是于1995年由Netscape公司设计实现而成的,由于Netscape公司与Sun公司合作,Netscape高层希望它看上去能够像Java,因此取名为JavaScript。

(1)请从上面一段文字中,找出所有名称为Java的字符串并统计该字符串出现的次数,注意不要统计名称为“JavaScript”中的Java字符串。

(2)在该段文字的后面追加一段文字:


Sun公司已被Oracle公司收购。

实验结果:




题目




6:


(选做题)

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。


知识点:String中常用方法、Java中英文字节数


提示:通常说的一个字符占两个字节是指汉字,英文字母是一个字节


String s = “我ABC汉DEF”


(1)先将s转为字符数组  char c[] = s.toCharArray()


(2)判断每个字符是英文字符还是中文字符,思路是看这个字符所占字节的长度


String.valueOf(c).getBytes().length

实验结果:




题目




7:


(选做题)金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。


知识点:String中常用的方法

实验结果:




三、实验源代码




源代码1:


package EXPS.Exp02;
import java.util.Random;
/**
 * @Author:XZITXX
 * 本程序的功能是:生成一个随机6*6表格,求行列的和,均值,极值
 */
public class Exp02_01_20190507223 {
    public static void main(String[] args) {
        int [][] array=new int[6][6];
        Random random=new Random();
        int randomBaseNum=20;
        for(int i=0; i<6; i++) {
            for(int j=0; j<6; j++) {
                array[i][j]=random.nextInt(79)+randomBaseNum;
            }
        }
        for(int i=0; i<6; i++){
            for(int j=0; j<6; j++){
                System.out.print(array[i][j]+" ");//打印初始数组
            }
            System.out.print("|");
            if(i==0){
                System.out.println("sum avg min max ");
            }
            else{
                System.out.println(rowSum(i-1,array)+" "+rowAvg(i-1,array)+" "+rowMin(i-1,array)+" "+rowMax(i-1,array));
            }
        }
        System.out.println("-----------------");

        System.out.print("sum ");
        for(int i=0;i<6;i++){
            System.out.print(colSum(i,array)+" ");
        }
        System.out.println("");

        System.out.print("avg ");
        for(int i=0;i<6;i++){
            System.out.print(colAvg(i,array)+" ");
        }
        System.out.println("");

        System.out.print("min ");
        for(int i=0;i<6;i++){
            System.out.print(colMin(i,array)+" ");
        }
        System.out.println("");

        System.out.print("max ");
        for(int i=0;i<6;i++){
            System.out.print(colMax(i,array)+" ");
        }
        System.out.println("");

    }
    public static int rowSum(int row,int [][] array){ //求一行和
        int res=0;
        for(int i=0;i<6;i++){
            res+=array[row][i];
        }
        return res;
    }
    public static String rowAvg(int row,int [][] array){
        return String.format("%.1f",(rowSum(row,array)+0.0)/6);
    }//求行平均
    public static int rowMin(int row,int [][] array){//求行最小值
        int res=array[row][0];
        for(int i=1;i<6;i++){
            res=Math.min(res,array[row][i]);
        }
        return res;
    }
    public static int rowMax(int row,int [][] array){//求行最大值
        int res=array[row][0];
        for(int i=1;i<6;i++){
            res=Math.max(res,array[row][i]);
        }
        return res;
    }
    public static int colSum(int col,int [][] array){//求列和
        int res=0;
        for(int i=0;i<6;i++){
            res+=array[i][col];
        }
        return res;
    }
    public static String colAvg(int col,int [][] array){
        return String.format("%.1f",(colSum(col,array)+0.0)/6);
    }//求列平均
    public static int colMin(int col,int [][] array){//求列最小值
        int res=array[0][col];
        for(int i=1;i<6;i++){
            res=Math.min(res,array[i][col]);
        }
        return res;
    }
    public static int colMax(int col,int [][] array){//求列最大值
        int res=array[0][col];
        for(int i=1;i<6;i++){
            res=Math.max(res,array[i][col]);
        }
        return res;
    }



源代码2:


package EXPS.Exp02;
import java.util.Scanner;
/**
 * @Author:XZITXX
 * 本程序的功能是:输入一个长度为N的序列,移动M个数
 */
public class Exp02_02_20190507223 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入数组元素的个数");
        int size = input.nextInt();
        if(size<=0){//判断非法数值
            System.out.println("非法数值,程序将停止");
            return;
        }
        int []array=new int[size];
        int []temp=new int[size];
        System.out.println("请依次输入每位数的值");
        for(int i=0;i<size;i++){
            array[i]=input.nextInt();
        }
        System.out.println("请输入要移动的位数");
        int m=input.nextInt();
        m=m%size;//处理循环的情况
        for(int i=0;i<size-m;i++){//利用temp数组储存被移数据
            temp[i]=array[i];
        }
        for(int i=size-m;i<size;i++){
            array[i-(size-m)]=array[i];
        }
        for(int i=0;i<size-m;i++){
            array[i+size-m+1]=temp[i];
        }
        System.out.println("结果为:");
        for(int i=0;i<size;i++){
            System.out.print(array[i]+" ");
        }
    }
}



源代码3:


package EXPS.Exp02;
/**
 * @Author:XZITXX
 * 本程序的功能是:矩阵相乘
 */
public class Exp02_03_20190507223 {
    public static int [][] matixA={{2,3,4},{4,6,8}};
    public static int [][] matixB={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
    public static void main(String[] args) {
        int res=0;
        for(int i=0;i<matixA.length;i++){
            for (int j = 0; j <matixB[0].length ; j++) {
                res+=countValue(i,j);
            }
        }
        System.out.println("矩阵运算的结果为:"+res);
    }
    public static int countValue(int row,int col){//表示矩阵相乘中第I行和第J列运算
        int []valueA=matixA[0];
        int []valueB={matixB[0][col],matixB[1][col],matixB[2][col]};
        int res=0;
        for(int i=0;i<3;i++){
            res+=valueA[i]*valueB[i];
        }
        return res;
    }
}



源代码4:


package EXPS.Exp02;
/**
 * @Author:XZITXX
 * 本程序的功能是:输出字符串相关信息
 */
public class Exp02_04_20190507223 {

    public static void main(String[] args) {
        String str="My school is Xuzhou Institute Of Technology";
        System.out.println("字符串长度为:"+str.length());//求字符串长度
        System.out.println("第一个字符为:"+str.charAt(0)+"    "+"最后一个字符为:"+str.charAt(str.length()-1));//求指定位置字符
        String []words=str.split(" ");//字符串分割
        System.out.println("第一个单词为:"+words[0]+"       "+"最后一个单词为:"+words[words.length-1]);
        System.out.println("”Xuzhou”在该字符串的起始位置为:" +str.indexOf("Xuzhou"));//查询字串首次出现位置
        System.out.println("大写结果:"+str.toUpperCase());//转大写
    }
}



源代码5:


package EXPS.Exp02;
/**
 * @Author:XZITXX
 * 本程序的功能是:字符串查找,添加
 */
public class Exp02_05_20190507223 {
    public static void main(String[] args) {
        StringBuffer str=new StringBuffer("Java和 JavaScript 虽有都有Java四个字,但它们是完完全全不同的两种东西,Java是由Sun 公司于1995年5月推出的,而JavaScript 是于1995年由Netscape公司设计实现而成的,由于Netscape公司与Sun公司合作,Netscape高层希望它看上去能够像Java,因此取名为JavaScript。");
        int count=0;
        for(int i=0;i+3<str.length();i++){
            String tempStr=str.substring(i,i+4);
            if(tempStr.equals("Java")) count++;//计算字符串JAVA个数
        }
        for(int i=0;i+9<str.length();i++){
            String tempStr=str.substring(i,i+10);
            if(tempStr.equals("JavaScript")) count--;//减去字符串JavaScript个数
        }
        System.out.println("Java字符串出现次数为:"+count);
        str.append("Sun公司已被Oracle公司收购。");
        System.out.println("添加过后的内容:");
        System.out.println(str);
    }
}



源代码6:


package EXPS.Exp02;
// 由于采用UTF-8编码,因此大部分汉字所占字节为3
import java.util.Scanner;
/**
 * @Author:XZITXX
 * 本程序的功能是:实现字符串截取
 */
public class Exp02_06_20190507223 {
    // cmd中在控制台输入中文字符存在问题
    public static void main(String[] args) {
        System.out.println("注意在UTF-8编码下,大部分汉字占3字节");
        String s="我ABC汉DEF";
        Scanner sc =new Scanner(System.in);
        System.out.println("输入截取字节数:");
        int len=sc.nextInt();
        System.out.println("原字符串为: "+s);
        System.out.println("截取结果为: "+subStr(s,len));
    }
    public static String subStr(String s,int len){
        char[]c=s.toCharArray();
        StringBuilder res=new StringBuilder();
        for(int i=0;i<c.length && len>0;i++){
            res.append(c[i]);
            len-=String.valueOf(c[i]).getBytes().length;
        }
        return res.toString();
    }
}



源代码7:


package EXPS.Exp02;
import java.util.Stack;
/**
 * @Author:XZITXX
 * 本程序的功能是: 阿拉伯数字的金额转换成中国传统的形式
*/
public class Exp02_07_20190507223 {
    public static String [] unit={"元","万","亿"};
    public static String []Dir={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    public static void main(String[] args) {
        String s="¥1011";
        System.out.println("原金额 :"+s);
        System.out.println("中文表示: "+toChinseVersion(s));
    }
    public static String toChinseVersion(String s){
        StringBuffer str=new StringBuffer(s);
        char[] a=str.delete(0,1).toString().toCharArray();
        Stack<String> stack=new Stack<>();
        for(int i=a.length-1;i>=0;i--){
            int val=a[i]-'0';

            StringBuffer temp=new StringBuffer();
            if(i>0 && val>0){
                if(a[i-1]-'0'==0){
                    temp.append("零"+Dir[val]);
                }
                else{
                    temp.append(Dir[val]);
                }
            }
            else if(val>0){
                temp.append(Dir[val]);
            }
            int t=a.length-1-i;
            if(t%4==0) temp.append(unit[t/4]);
            else if(temp.length()!=0){
                switch (t%4){
                    case 1:
                        temp.append("拾");
                        break;
                    case 2:
                        temp.append("佰");
                        break;
                    case 3:
                        temp.append("仟");
                        break;
                }
            }
            stack.push(temp.toString());
        }
        StringBuffer res=new StringBuffer();
        while(!stack.empty()){ //利用栈逆序将答案输出
            res.append(stack.pop());
        }
        res.append("整");
        return res.toString();
    }
}



四、实验总结


通过这次实验,我掌握了数组的声明、分配空间及初始化;理解了多维数组,重点掌握了二维数组;除此之外,我还掌握了String类的特点及常用方法的使用,StringBuffer类的特点及常用方法的使用 ,String类和StringBuffer类的区别;理解equal方法与==的区别并且掌握了常用类的使用。



版权声明:本文为Luoxiaobaia原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。