本文是在学习过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函数
-
参数解释:
arr
(Object src
):源数组,即你要从中复制数据的数组。0
(int srcPos
):源数组中的起始位置(索引),从该位置开始复制数据。在这个例子中,它是0
,意味着从源数组的第一个元素开始复制。new_arr
(Object dest
):目标数组,即你要将数据复制进去的数组。这个数组必须已经存在,并且有足够的空间来存储要复制的数据。0
(int destPos
):目标数组中的起始位置(索引),从该位置开始放置复制的数据。在这个例子中,它也是0
,意味着从目标数组的第一个元素开始放置数据。number
(int 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;
}
}
}