数组练习二

顾客从超市采购了10件商品,编写一个程序,用于接受每件商品的价格,计算应付的总金额。并分别打印出各个商品的价格以及应付的总金额的小票。

// 定义数组存放10件商品的价格
double[] price = new double[10];
// 创建Scanner扫描器
Scanner input = new Scanner(System.in);
// 定义变量存放商品和
double sum = 0;
// 循环接收商品价格
for(int i=0;i<price.length;i++){
    System.out.println("请输入第"+(i+1)+"件商品的价格:");
    price[i] = input.nextDouble();
    // 累加求和
    sum = sum + price[i];
}

// 关闭Scanner资源,释放内存
sc.close();

// 打印小票
System.out.println("************购物小票************");
// 遍历数组,取数组中的数据
for(int i=0;i<price.length;i++){
    System.out.println("第"+(i+1)+"商品价格为:"+price[i]);
}
System.out.println("您的应付总金额为:"+sum+"元");

 

打印扑克牌

效果如图所示

// 花色数组
        String[] a  = {"黑桃","红桃","梅花","方片"};
        // 点数数组
        String[] b = {"A","2","3","4", "5","6","7","8","9","10","J","Q","K"};


        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                // 拼接字符串
                System.out.print(a[i] + b[j] + " ");
            }
            // 输出换行
            System.out.println();
            
        }

模拟在一副牌中,抽取第1张,第5张,第50张扑克牌。

效果如图所示:

String[] colors={"黑色","红桃","梅花","方块"};
        String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        // 获取所有扑克牌
        // 4*13=52种排列组合   加上 一张 小王  一张 大王   54张牌
        String[] puke = new String[54];
        int index = 0;
        for (int i = 0; i < colors.length; i++) {
            for (int j = 0; j < nums.length; j++) {
                // index 从0 到51
                puke[index] = colors[i]+nums[j];
                index ++;
            }
        }
        puke[52] = "小王";
        puke[53] = "大王";

        // 抽取指定的三种扑克牌
        int num1 = 1;
        int num2 = 5;
        int num3 = 50;

        // 数组索引从0开始  第一张牌索引为0    第五张牌索引为4   第50张牌索引为49
        String[] pk3 = new String[3];
        pk3[0] = puke[num1 - 1];
        pk3[1] = puke[num2 - 1];
        pk3[2] = puke[num3 - 1];


        // 打印抽取的牌
        for (int i = 0; i < pk3.length; i++) {
            System.out.print(pk3[i] + " ");
        }

实现数组元素的复制。

 int[] arr = {1,2,3,4,5,6,7};    int[] brr = new int[10];

要求:把arr的第3个到第5 元素 复制到 brr的第7个到第9个元素。(必须使用循环

并且打印brr的内容验证是否成功。

int[] arr = {1,2,3,4,5,6,7};
        int[] brr = new int[10];

        // 复制arr的第3个到第5个元素到brr的第7个到第9个元素
        for (int i = 0; i < 3; i++) {
            brr[i+6] = arr[i+2];
        }

        // 打印brr的内容
        System.out.println("brr数组的内容为:");
        for (int i = 0; i < brr.length; i++) {
            System.out.print(brr[i] + " ");
        }

实现数组元素的删除(去重)

int[] arr = {1,2,3,4,4,5,6,7};

要求删除重复的元素4(删除一个),并且把后面的元素前移,最后一个元素不用管。

并且打印arr的内容验证是否成功。

 //Arrays 去重
 //Java是面向对象编程
 //C是面向过程编程
        int[] arr = {1,2,3,4,4,5,6,7};
        int[] arr2=Arrays.stream(arr).distinct().toArray();
int[] arr = {1,2,3,4,4,5,6,7};
        // 去除数组重复元素,记住以下公式即可
        int len = arr.length;
        // 用于遍历数组中的每个元素
        for (int i = 0; i < len; i++) {
            // 用于比较当前元素与后面的每个元素是否相等
            for (int j = i + 1; j < len; j++) {
                if (arr[j] == arr[i]) {
                    // 将重复的元素后面的元素向前移动一个位置,覆盖掉重复的元素
                    for (int k = j; k < len - 1; k++) {
                        arr[k] = arr[k + 1];
                    }
                    // 数组的长度减1
                    len--;
                    // 内层循环的索引j减1,以确保下一轮循环正确比较被移动后的元素
                    j--;
                }
            }
        }

        // 创建一个新的数组,将去除重复元素后的元素复制到新数组中
        int[] newArr = new int[len];
        for (int i = 0; i < len; i++) {
            newArr[i] = arr[i];
        }

        System.out.print("去重后的数组为:");
        for (int i = 0; i < len; i++) {
            System.out.print(newArr[i] + " ");
        }
        System.out.println();

随机排名 ( 打乱数据 )

某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。

请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。

22    33    35    13     88  -----------13    35    88    33     22

分析

在程序中录入5名员工的工号存储起来 ---> 使用数组。

依次遍历数组中的每个元素,随机一个索引数据,让当前元素与该索引位置处的元素进行交换。

Scanner scanner = new Scanner(System.in);
        int[] num = new int[5]; // 存储员工工号的数组

        // 录入员工工号
        for (int i = 0; i < num.length; i++) {
            System.out.print("请输入第" + (i + 1) + "名员工的工号:");
            num[i] = scanner.nextInt();
        }
        // 随机排名
        Random random = new Random();
        for (int i = 0; i < num.length; i++) {
            int index = random.nextInt(num.length);
            int temp = num[i];
            num[i] = num[index];
            num[index] = temp;
        }
        // 展示随机的排名顺序
        System.out.println("排名顺序:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }

开发一个幸运小游戏,游戏规则如下:

游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:

未猜中提示:“未命中”,并继续猜测

猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的索引位置,最后把数组中的5个数据都输出看一下, 然后结束本游戏。

分析

随机生成51-20之间的数据存储起来 ---> 使用数组

定义一个死循环,输入数据猜测,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束死循环;如果没有猜中,提示继续猜测直到猜中为止。

int[] numbers = new int[5];
        Random random = new Random();
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = random.nextInt(20) + 1;
        }

        System.out.println("游戏开始!");
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入一个1-20之间的数字:");
            int guess = scanner.nextInt();

            boolean found = false;
            for (int i = 0; i < numbers.length; i++) {
                if (numbers[i] == guess) {
                    System.out.println("运气不错,猜中了!");
                    System.out.println("猜中的数字第一次出现的索引位置为:" + i);
                    System.out.print("数组中的数字为:");
                    for (int j = 0; j < numbers.length; j++) {
                        System.out.print(numbers[j] + " ");
                    }
                    System.out.println();
                    found = true;
                    break;
                }
            }

            if (found) {
                break;
            } else {
                System.out.println("未命中,继续猜测!");
            }
        }

        System.out.println("游戏结束!");

某公司采用公用电话传递数据,数据是4位整数,在传递过程中是加密的,加密规则如下:每位上的数字加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,编写一个程序,用于接受一个4位整数,并且打印输出加密后的数字  

比如:

输入的数字为: 1345  

每位上的数字加上5,然后用和除以10的余数代替该数字:  6890
将第一位和第四位交换,第二位和第三位交换0986

Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个4位整数:");
        int number = scanner.nextInt();

        int[] num = new int[4];
        for (int i = 3; i >= 0; i--) {
            num[i] = (number % 10 + 5) % 10;
            number /= 10;
        }

        // 交换位置
        int temp = num[0];
        num[0] = num[3];
        num[3] = temp;

        temp = num[1];
        num[1] = num[2];
        num[2] = temp;

        System.out.print("加密后的数字为:");
        for (int a : num) {
            System.out.print(a);
        }

石头剪刀布游戏

电脑随机生成选择(石头、剪刀、布)

用户输入自己的选择(石头、剪刀、布)

0表示石头,1表示剪刀,2表示布

根据用户和电脑的选择,输出游戏结果(用户胜利、电脑胜利、平局)

程序可以进行多轮游戏,直到用户选择退出为止;

并且记录用户玩了多少轮。

对于每一轮游戏,程序需要输出当前轮数和用户和电脑的选择以及游戏结果

提示:  String[] choices = {"石头", "剪刀", "布"};

参考代码:

Scanner scanner = new Scanner(System.in);
Random random = new Random();
String[] choices = {"石头", "剪刀", "布"};
int userWins = 0;
int round = 1;

System.out.println("欢迎来玩石头剪刀布游戏!");

while (true) {

    round++;
    System.out.print("请输入你的选择(0表示石头,1表示剪刀,2表示布,-1表示结束游戏):");
    int userChoice = scanner.nextInt();
    if (userChoice == -1) {
        System.out.println("游戏结束");
        break;
    }

    if (userChoice < 0 || userChoice > 2) {
        System.out.println("无效的选择,请重新输入!");
        continue;
    }

    int computerChoice = random.nextInt(3);

    System.out.println("你的选择:" + choices[userChoice]);
    System.out.println("电脑的选择:" + choices[computerChoice]);

    if (userChoice == computerChoice) {
        System.out.println("平局!");
    } else if ((userChoice == 0 && computerChoice == 1) || (userChoice == 1 && computerChoice == 2)
            || (userChoice == 2 && computerChoice == 0)) {
        System.out.println("你赢了!");
        userWins++;
    } else {
        System.out.println("你输了!");
    }

    if (userWins > 0) {
        System.out.println("你已经赢了" + userWins + "轮,游戏结束!");
        break;
    }

    round++;
}

开发部有15名员工,编写一个程序,用于接收每个员工的年龄,计算并输出开发部员工的平均年龄,最大年龄及最小年龄。

参考代码:

// 定义数组存放15名员工的年龄
int[] ages = new int[15];
//
创建Scanner扫描器
Scanner input = new Scanner(System.in);
//
定义变量存放年龄和
 

int sum = 0;
// 循环接收员工的年龄,在数组中存储数据
for(int i=0;i<ages.length;i++){
    System.out.println("请输入第"+(i+1)+"个员工的年龄");
    ages[i] = input.nextInt();
    // 累加求和
    sum = sum+ages[i];
}

// 关闭Scanner资源,释放内存
sc.close();

// 定义变量存放最大年龄
int max = ages[0];
// 定义变量存放最小年龄
int min = ages[0];
// 循环遍历 从数组中取数据进行比较
for(int i=1;i<ages.length;i++){
    if(ages[i]>max){
        max = ages[i];
    }

    if(ages[i]<min){
        min=ages[i];
    }
}

System.out.println("\n员工的平均年龄是:"+sum/ages.length);
System.out.println("最大员工年龄是:"+max);
System.out.println("最小员工年龄是:"+min);

编写学生信息管理系统项目中的模块功能----考试成绩的管理

先输入参加考试的人数,然后输入考生姓名和考试成绩,存入数组中。

然后计算出平均分和最高分,并打印出最高分的考生的姓名(有可能多个姓名)

Scanner sc = new Scanner(System.in);
        System.out.println("请输入考生人数");
        int num = sc.nextInt();
        if(num <= 0){
            System.out.println("人数错误");
            return;
        }

        String[] names = new String[num];
        int[] scores = new int[num];
        // 循环接收学生姓名和成绩,在数组中存储数据
        for(int i=0;i<names.length;i++){  // 输入姓名和成绩
            System.out.println("请输入第"+(i+1)+"位考生姓名");
            names[i] = sc.next();
            System.out.println("请输入"+(i+1)+"位考生成绩");
            scores[i] = sc.nextInt();
        }

        // 关闭Scanner资源,释放内存
        sc.close();

        double sum = 0;
        int max = scores[0];

// 循环遍历 从数组中取数据进行比较
        for(int i=0;i<scores.length;i++){// 计算总分和最高分
            sum = sum + scores[i];
            if(max < scores[i]){
                max = scores[i];// 最大值的算法
            }
        }
        System.out.println("平均分:"+sum/num);
        System.out.println("最高分:"+max);
        for(int i=0;i<scores.length;i++){
            if(scores[i] == max) {
                System.out.print("最高分的考生的姓名是"+names[i] + " ");
            }
        }

写一个抽奖程序。

      奖项包括: 一等奖(2)、二等奖(5)、三等奖(10)、四等奖(20)、普及奖(安慰奖)。

      模拟40个员工的直接抽奖(使用随机数),打印抽奖的结果。

      注意: 1234等奖 不能超过自己的次数,普及奖随意(1000个)

int[] arr = {2,5,10,20,10000};
String[] names = {"一等奖","二等奖","三等奖","四等奖","普及奖"};
Random ran = new Random();
for(int i=0;i<40;i++){ //模拟40次抽奖
    int num = ran.nextInt(arr.length); // 随机下标 得到 随机的数据
    if(arr[num] == 0){ // 该奖项已经发完了
        i--; // 本次循环失效,继续本次循环;先 i-- 再 i++ 等价于 i不动
    }else{ // 奖项没有发完
        arr[num]--; // 奖项的次数减少1
        System.out.println(names[num]);
    }
}

班上有3位学生,每位学生有3门成绩(HTMLJAVAC++),接收用户输入的学生的成绩进行存储,并计算每位学生的成绩总分和平均分,最后以表格的形式输出。

要求分别使用一维数组和二维数组各写一个

//一维数组:
int[] htmls = new int[3];
int[] javas = new int[htmls.length];
int[] cs = new int[htmls.length];

Scanner in = new Scanner(System.in);

for(int i=0; i<htmls.length; i++){
    System.out.println("请输入第"+ (i+1) + "个同学的HTML成绩:");
    htmls[i] = in.nextInt();
    System.out.println("请输入第"+ (i+1) + "个同学的JAVA成绩:");
    javas[i] = in.nextInt();
    System.out.println("请输入第"+ (i+1) + "个同学的C++成绩:");
    cs[i] = in.nextInt();
}
System.out.println();
System.out.println("HTML\tJAVA\tC++\t总分\t平均分");
for (int i=0; i<htmls.length; i++) {
    System.out.print(htmls[i] +"\t");  // html
    System.out.print(javas[i] +"\t");  // java
    System.out.print(cs[i] +"\t");    // c++
    int sum = htmls[i] + javas[i] + cs[i];
    System.out.print(sum+"\t");       // 总分
    System.out.print(sum / 3 +"\t");      // 平均分
    System.out.println();
}



// 二维数组的定义
// 定义时赋值
// double[][] scores = {{52,56,54},{85,80,87},{74,75,79},{90,95,94},{62,69,62}};
double[][] scores = new double[5][3];
// 创建扫描器
Scanner input = new Scanner(System.in);
// 接收学生分数
for(int i = 0;i < scores.length ;i++){  // 外层循环控制行
    for(int j=0;j<scores[i].length;j++){ // 内层循环控制列
        System.out.println("请输入第"+(i+1)+"个学生的第"+(j+1)+"个分数:");
        scores[i][j] = input.nextDouble();
    }
}
// 输出学生分数
System.out.println("\n学生分数列表");
System.out.println("HTML\tJAVA\tC++\t总分\t平均分");
for(int i = 0;i < scores.length ;i++){  // 外层循环控制行
    double sum=0; // 存放总分
    for(int j=0;j<scores[i].length;j++){ // 内层循环控制列
        System.out.print(scores[i][j]+"\t");
        sum = sum + scores[i][j];
    }
    System.out.println(sum+"\t"+sum/3);
}

接收并输出某公司某月的考勤和扣款信息,假设公司有4个员工,每个员工的考勤项有上下班忘打卡、迟到、早退、旷工,其中上下班忘打卡扣款10元/次,迟到和早退扣款为20元/次,旷工100元/天,参考图如下(参考图中是以3个员工为例):

提示:使用二维数组

  int[][] staff = new int[4][5]; //定义4个员工  5条数据
        Scanner s = new Scanner(System.in);
        for (int i = 0; i < staff.length; i++) {
            System.out.println("请输入第"+(i+1)+"个员工的编号:");
            staff[i][0] = s.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工的忘记打卡次数:");
            staff[i][1] = s.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工的迟到次数:");
            staff[i][2] = s.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工的早退次数:");
            staff[i][3] = s.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工的矿工次数:");
            staff[i][4] = s.nextInt();
        }
        int price=0; // 定义罚款数为0
        System.out.println("********************本月考勤信息**************");
        System.out.println("员工编号"+"   "+"忘记打卡"+"    "+"迟到"+"   "+"矿工"+"  "+"总罚款(单位元)");
        for (int i = 0; i < staff.length; i++) {
            System.out.print(staff[i][0]+"  "+staff[i][1]+"  "+staff[i][2]+"  "+staff[i][3]+"  "+staff[i][4]);
            price=(staff[i][1]*10) + (staff[i][2]+staff[i][3])*20 + (staff[i][4])*100;
            System.out.println("  "+price);
        }

一家贸易公司有四位销售员,每位销售员负责销售四件商品,编写一个程序,接收每名销售员销售的各类产品的数量。打印产品销售明细表,明细表包括每类产品的销售总数,以及每位销售员销售的产品数量占总销售的百分比。

使用以下公式:

销售员N销售的产品A的百分比=(销售员N售出的产品A的销售量/总销售量)*100

总销售量指各类产品销售量的总和

提示:使用二维数组

int[][] staff=new int[2][4];
        Scanner scanner=new Scanner(System.in);
        for (int i = 0; i < staff.length; i++) {
            System.out.println("请输入"+(i+1)+"销售员,销售产品A的数量");
            staff[i][0]=scanner.nextInt();
            System.out.println("请输入"+(i+1)+"销售员,销售产品B的数量");
            staff[i][1]=scanner.nextInt();
            System.out.println("请输入"+(i+1)+"销售员,销售产品C的数量");
            staff[i][2]=scanner.nextInt();
            System.out.println("请输入"+(i+1)+"销售员,销售产品D的数量");
            staff[i][3]=scanner.nextInt();

        }
        scanner.close();
        int Anum =staff[0][0]+staff[1][0];
        int Bnum =staff[0][1]+staff[1][1];
        int Cnum =staff[0][2]+staff[1][2];
        int Dnum =staff[0][3]+staff[1][3];

        System.out.println();
        System.out.println("产品销售情况汇总表");
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~");
        System.out.println("产品        A        B        C       D");
        System.out.println("销售总数" +Anum+" "  +Bnum+" "     +Cnum+" "   +Dnum);
        System.out.println("产品销售百分比明细表");
        System.out.println("--------------------------------------");
        System.out.println("销售员                 产品");
        System.out.println("--------------------------------------");
        System.out.println("      A       B       C      D      合计");
        //销售员N销售的产品A的百分比=(销售员N售出的产品A的销售量/总销售量)*100
        //总销售量指各类产品销售量的总和

        int sum2=0;
        int sum=Anum+Bnum+Cnum+Dnum;
        for (int i = 0; i < staff.length; i++) { //销售员i销售 的每个产品
            for (int j = 0; j < staff[i].length; j++) {
                System.out.print(i+1);
                int precent =(staff[i][j]/sum);
                System.out.print(" "+precent);
                sum2=sum2+precent;

            }
            System.out.println(" "+sum2);
            System.out.println();
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值