JAVA-案例练习-基本语法学习

       本文是在学习过C语言后,开始进行Java学习时,对于基本语法的一些案例练习。案例内容来自B站黑马编程课

1.HelloWorld

       问题介绍;请编写程序输出“HelloWorld”.

public class HelloWorld {  
    public static void main(String[] args) {  
        System.out.println("Hello World");  
    }  
}

      1. public class HelloWorld :公共类(Public Class),每个Java源文件中都可以有一个(且只有一个)公共类,这个公共类的名称必须与源文件的名称相同(包括大小写)。

     2.main(String [ ] args): 类中包含了一个主方法(main方法),这是Java程序的入口点。main方法接受一个字符串数组args作为参数,这个数组通常用于接收从命令行传递给程序的参数。

     3.println:在main方法内部,调用了System.out.println方法来在控制台上打印出字符串"Hello World"System.out是Java的标准输出流,而println是一个方法,用于输出数据并换行。


2.购买飞机票

        问题介绍:用户购买机票时,机票原价会按照淡季,旺季,头等舱还是经济舱的情况进行相应的优惠,优惠方案如下:5-10月为旺季,头等舱9折,经济舱8.5折;11月到来年4月为淡季,头等舱7折,经济舱6.5折,请开发程序计算用户当前机票的优惠价。

package JAVA_study.src.Text;

import java.util.Scanner;

public class Text1 {
    public static void  main(String[] age){

        Scanner sr = new Scanner(System.in);
        double money = 1000.0; //票价
        System.out .println("请输入当前月份");
        int month = sr.nextInt();

        System.out.println("请输入选择机票种类");
        String type = sr.next();

       double place = sed(money,month,type);

       System.out.println("最终票价为" +place);

    }
    public static double sed(double money,int month,String type){

        double place = 1.0;

         if(month >= 5 && month <= 10){
             switch (type) {
                 case "头等舱" : place = 0.9 * money; break;
                 case "经济舱" : place = 0.85 * money;break;
             }
         }
         else {
            switch (type) {
                case "头等舱" : place = 0.7 * money; break;
                case "经济舱" : place = 0.65 * money; break;
            }
        }

        return place;
    }
}

     1.方法(类似于c中的函数)

    2.选择语句和判断语句

    对于if,else if,以及Switch case 语句和C语言用法是一致的。


3.生成验证码

        问题介绍:开发一个程序,可以生成指定位数的验证码,每位可以是数字,大小写字母。

package JAVA_study.src.Text;


import java.util.Random;
import java.util.Scanner;

public class Text2 {

    public static void  main(String[] args){

        Scanner sr = new Scanner(System.in);
        int length = sr.nextInt();
        System.out.println(code(length));
    }

    public static String code(int n){

        Random r= new Random();
        String ans = "";
        for(int i=0;i<n;i++){
            int type = r.nextInt(3);
            switch (type) {
                case 0: ans += r.nextInt(10);break;
                case 1: char str1 = (char)(r.nextInt(26)+65); ans += str1;break;
                case 2: char str2 = (char)(r.nextInt(26)+65+32); ans +=str2;break;
                }
            }
         return ans;
    }
}

1.随机数函数:Random,使用Random(3)生成从0-2的三位随机数,即包含左边,不包含右边。


4.评委打分

         问题介绍:在唱歌比赛中,可能有多个评委要给选手打分,分数是[0 -100] 之间的整数。选手最后的得分为:去掉最高分,最低分后剩余分数的平均分,请编写程序能够录入多名评委的分数,并计算选手的最终得分。

package JAVA_study.src.Text;

import java.util.Scanner;

public class Text3 {
    public static void main(String[] arr){


        Scanner se = new Scanner(System.in);
        System.out.println("请输入评委人数");
        int num = se.nextInt();
        System.out.println("该学生的成绩为"+A(num)+"分");
    }

    public static double A(int num){
        Scanner se = new Scanner(System.in);
        double ave = 0.0;
        int MAX = 0;
        int MIN = 100;
        int sum = 0;
        int[] sums = new int [num];

        for(int i=0;i<num;i++){
            System.out.println("请输入第"+(i+1)+"位评委的分数");
            int sr = se.nextInt();
            sums[i] = sr;
            sum += sr;
            if(sr > MAX){MAX = sr;}
            if(sr < MIN){MIN = sr;}
        }
        ave =(sum-MAX-MIN)/(num-2.0);

        return ave;
    }
}
//这是没有看视频之前,自己写的,下面是视频代码
/*
import java.util.Scanner;

public class Text3 {
    public static void main(String[] arr){


        Scanner se = new Scanner(System.in);
        System.out.println("请输入评委人数");
        int num = se.nextInt();
        System.out.println("该学生的成绩为"+A(num)+"分");
    }

    public static double A(int num){
        Scanner se = new Scanner(System.in);
        double ave = 0.0;
        int MAX = 0;
        int MIN = 100;
        int sum = 0;
        int[] sums = new int [num];

        for(int i=0;i<num;i++){
            System.out.println("请输入第"+(i+1)+"位评委的分数");
            int sr = se.nextInt();
            sums[i] = sr;
            sum += sr;
            if(sr > MAX){MAX = sr;}
            if(sr < MIN){MIN = sr;}
        }
        ave =(sum-MAX-MIN)/(num-2.0);

        return ave;
    }
}*/

package JAVA_study.src.Text;

import java.util.Scanner;

public class Text3 {
    public static void main(String[] arr) {
    //目标:完成评委打分案例
        System.out.println("当前选手的得分是:"+getAverageScore(6));
    }
    public static double getAverageScore(int number){
        //定义一个动态初始化的数组,方便后期存入评委的打分
        int []scores = new int [number];

        //遍历数组每一个位置,依次录入评委分数
        Scanner sc = new Scanner(System.in);
        for (int i = 0;i<number;i++) {
            System.out.println("请您录入第"+(i+1)+"个评委的分数");
            int score = sc.nextInt();
            scores[i] = score;
        }

        int sum = 0; //求总分的变量
        int max = scores[0];
        int min = scores[0];

        //遍历一般找数据
        for (int i = 0; i < scores.length; i++) {
            int score =scores[i];
            sum += score;
            if(score > max){max= score;}
            if(score < min){min= score;}
        }
        return (sum-min-max)/(number-2.0);
    }
}

1.for循环:与C语言使用是一致的,for(循环变量;终止条件;变量变化){ 执行语句;}

在IDEA中,可以使用 循环的次数.fori(回车)来快捷输入一个for循环。

2.数据运算:包括四则运算,自增,自减运算都和C语言是一致的,还有浮点数除法除数要加小数点。


5.数字解密

           问题介绍:某系统的数字密码是一个四位数,如1983,为了安全,需要加密后再传输,加密规则是:对于密码的每位数,都加5,再对10求余,最后将所有的数字顺序反转,得到一组加密后的新数,请设计出满足本需求的加密程序。

package JAVA_study.src.Text;

import java.util.Scanner;

public class Text4 {
    public static void main(String [] ages){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要加密的数字");
        int num = sc.nextInt();
        int number = 1;
        int s = num;
        while(s > 1){number++;s=s/10;}
        int [] a = M(num,number);
        int result = 0;int p =1;
        for (int i = number-1; i >= 0; i--) {
             result += a[i]*p;
             p *=10;
        }
        System.out.println(result);
    }


    public static int [] M(int num,int number){
        int [] arrs = new int[number];
        for (int i = 0; i < number; i++) {
            arrs[i] = ((num%10)+5)%10;
            num = num/10;
        }
        return arrs;
    }
}

1.Java可以直接返回数组!!基本的计算方法与C语言是一致的,这里没有参考视频中的函数写法。


6.数组拷贝

        问题介绍:请把一个整型数组,例如存储了数据:11,22,33,拷贝成一个新数组出来

package JAVA_study.src.Text;

import java.util.Arrays;
import java.util.Scanner;

public class Text5 {
    public static void main(String []ags){
        System.out.println("请输入数组元素个数");
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        int [] arr = new int [number];
        for (int i = 0; i < number; i++) {
            System.out.println("请输入第"+(i+1)+"个数组元素");
            int input = sc.nextInt();
            arr[i] = input;
        }
        int [] result = Copy_arr(arr,number);
       for(int i=0;i<number;i++){
        System.out.println(result[i]);
}
    }

    public static int []Copy_arr(int []arr,int number){
        int []new_arr = new int [number];
        for (int i = 0; i < number; i++) {
            new_arr[i] = arr[i];
        }
        return new_arr;
    }
}

 java提供了许多简单有用的函数来实现一些功能。

    1.数组打印:除开for循环外,提供了一种System.out.println(Arrays.toString(result))的实现方法。这行代码的作用是打印数组result的内容到控制台,每个元素以字符串形式表示,元素之间用逗号加空格分隔,整个数组被方括号包围。

     2.数组拷贝:可以不用手动循环拷贝,可以使用System.arraycopy(arr, 0,new_arr, 0, number)

关于arraycopy函数

  • 参数解释

    • arrObject src):源数组,即你要从中复制数据的数组。
    • 0int srcPos):源数组中的起始位置(索引),从该位置开始复制数据。在这个例子中,它是 0,意味着从源数组的第一个元素开始复制。
    • new_arrObject dest):目标数组,即你要将数据复制进去的数组。这个数组必须已经存在,并且有足够的空间来存储要复制的数据。
    • 0int destPos):目标数组中的起始位置(索引),从该位置开始放置复制的数据。在这个例子中,它也是 0,意味着从目标数组的第一个元素开始放置数据。
    • numberint length):要复制的数组元素的数量。在这里,number 指定了从源数组复制到目标数组的元素数量。
  • 操作过程

    • System.arraycopy 方法会从 arr 数组的 0 索引位置开始,复制 number 个元素到 new_arr 数组的 0 索引位置。

    • 如果 new_arr 数组的长度小于 number,那么将会抛出 ArrayIndexOutOfBoundsException 异常,因为目标数组没有足够的空间来存储所有要复制的元素。

    • 如果源数组 arr 的长度小于 srcPos + length(在这个例子中是 0 + number),那么同样会抛出 ArrayIndexOutOfBoundsException 异常,因为源数组没有足够的元素可供复制。

  • 注意事项

    • 在使用 System.arraycopy 之前,确保目标数组 new_arr 已经被正确初始化,并且有足够的空间来存储要复制的数据。
    • 如果源数组和目标数组是同一个数组,并且源位置和目标位置有重叠,那么复制的结果将是未定义的。
    • 对于基本数据类型数组和对象数组,System.arraycopy 都可以正常工作。但是,对于对象数组,复制的是对象的引用,而不是对象本身。

7.抢红包

        问题介绍:一个大V直播时发起了抢红包活动,分别有:9.666.188.520.99999五个红包。请模拟粉丝来抽奖,按照先来先得,随机抽取,抽完为止,注意:一个红包只能抽一次,先抽或后抽哪一个红包时随机的。

package JAVA_study.src.Text;

import java.util.Random;
import java.util.Scanner;

public class Text6 {
    public static void main(String [] args){
        //目标:完成抢红包案列的开发
        int []moneys ={9,666,188,520,99999};
        start(moneys);
    }
    public static void start(int []moneys){

        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        for (int i = 0; i < 5; i++) {
            System.out.println("请输入任意内容进行抽奖");
            sc.next(); //等待输入内容按到回车才往下走
            while(true) {
                int index = r.nextInt(moneys.length);
                int money = moneys[index];

                if (money != 0) {
                    System.out.println("恭喜您,您抽中了红包" + money);
                    moneys[index] = 0;
                    break;
                }
            }
        }
        System.out.println("活动结束");
    }
}

8.找素数

        问题介绍:判断101-200之间有多少个素数,并输出所有素数

package JAVA_study.src.Text;

import java.util.Arrays;

public class Text7 {
    public static void main(String[] args){
        su();
    }

    public static void su(){
        //目标是从101到200之间的素数
        int sum;
        int num =0;
        int [] result = new int [100];
        int input = 0;
        for (int i = 101; i <=200; i++) {
            sum = 0;
            for (int i1 = 2; i1 < i; i1++) {
                if(i%i1 == 0){sum++;}
            }
            if(sum == 0){result[input++] = i;num++;}
        }
            System.out.println("共有素数"+num+"个");
            for (int i = 0; i < num; i++) {
            System.out.println(result[i]+" ");
        }
    }

}

教学中提供的是信号位思想。使用flat来进行判断。

 for (int i = 101; i <=200; i++) {
            boolean flat = true;
            for (int i1 = 2; i1 < i; i1++) {
                if(i%i1 == 0){flat = false;}
            }
            if(flat){result[input++] = i;num++;}
        }

9.打印九九乘法表

                问题介绍 打印九九乘法表

public class MultiplicationTable {  
    public static void main(String[] args) {  
        // 外层循环控制行  
        for (int i = 1; i <= 9; i++) {  
            // 内层循环控制列  
            for (int j = 1; j <= i; j++) {  
                // 打印乘法表的一项,注意这里j和i的顺序决定了是横向打印还是纵向打印   
                System.out.print(j + "*" + i + "=" + (i * j) + "\t");  
            }  
            // 每完成一行的打印后,输出一个换行符以开始新的一行  
            System.out.println();  
        }  
    }  
}

10.模拟双色球

        问题介绍:用户投注7个号码,6个红色,1个蓝色。按照和系统随机出的这组号码判断中奖金额。

package JAVA_study.src.Text;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Text8 {
    public static void main(String[] args) {
    int [] a1 = inputarr();
    System.out.println(Arrays.toString(a1));

    int [] a2 = suijiarr();
    System.out.println(Arrays.toString(a2));
    cmp(a1,a2);
    }

    public static int[] inputarr() {
        int[] arr = new int[7];
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < 6; i++) {
            while (true) {
                System.out.println("请输入第" + (i + 1) + "位红球号码");
                int num = sc.nextInt();
                if (num < 1 || num > 33) {
                    System.out.println("号码有误 请检查");
                } else {
                    if (exist(arr, num)) {
                        System.out.println("输入的号码重复 请重试");
                    } else {
                        arr[i] = num;
                        break;
                    }
                }
            }
        }

        while (true) {
            System.out.println("请输入蓝球号码");
            int num = sc.nextInt();
            if (num < 1 || num > 16) {
                System.out.println("号码有误 请检查");
            } else {
                arr[6] = num;
                break;
            }
        }
        return arr;
    }
    public static int[] suijiarr() {
        int[] arr = new int[7];
        Random r = new Random();
        for (int i = 0; i < 6; i++) {
            while (true) {
                int n = r.nextInt(33)+1;
                if (!exist(arr, n)) {
                    arr[i] = n;
                    break;
                }
            }
        }
        while (true) {
            int n = r.nextInt(17)+1;
            if (!exist(arr, n)) {
                arr[6] = n;
                break;
            }
        }
            return arr;
        }
        private static boolean exist( int[] arr, int num){
            for (int i = 0; i < 7; i++) {
                if(arr[i] ==0){break;}
                if (arr[i] == num) {
                    return true;
                }
            }
            return false;
        }

        public static void cmp(int []a1,int []a2){
        int redcount=0,bluecount=0;
            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 6; j++) {
                    if(a1[i] == a2[j]){redcount ++;break;}
                }
            }
            if(a1[6] == a2[6]){bluecount++;}
            switch(redcount){
                case 6:if(bluecount == 1){System.out.println("恭喜您中奖 1000万元");break;}else{System.out.println("恭喜您中奖 500万元");break;}
                case 5:if(bluecount == 1){System.out.println("恭喜您中奖 3000元");break;}else{System.out.println("恭喜您中奖 200元");break;}
                case 4:if(bluecount == 1){System.out.println("恭喜您中奖 200元");break;}else{System.out.println("恭喜您中奖 10元");break;}
                case 3:if(bluecount == 1){System.out.println("恭喜您中奖 10元");break;}else{System.out.println("恭喜您中奖 5元");break;}
                case 2:if(bluecount == 1){System.out.println("恭喜您中奖 5元");break;}
                case 1:if(bluecount == 1){System.out.println("恭喜您中奖 5元");break;}
                case 0:if(bluecount == 1){System.out.println("恭喜您中奖 5元");break;}System.out.println("很遗憾 您没有中奖");break;
            }
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值