JAVA学习之实践一
寻找素数的方法
- 首先要明白什么是素数:除了1和它本身,不能被整除的数!
明白了这一点后,我们就有思路了,比如一个数101,我是不是要让他与2开始比较直到100即可,看它整除的结果是否为0,IF(101%i == 0)那么我们就直接break,说明此数不是素数,我们继续下一个102…以此类推,因此我们只用到了所学的两种方法,一个是FOR,一个是IF。
public class DAY3_AnLi {
public static void main(String[] args) {
/*找素数:最重要的是知道什么是素数,除了一和它本身外能被整除的数称为素数,所以我们只要判断它与这些数相除能否为0,
* 如果为0,直接跳出循环,说明此数不是素数,
* 如果不为0,循环完之后,通过条件必大小来输出此素数。
* */
System.out.println("素数有:");
int i,k;
for (i = 101; i < 201; i++) {
for (k = 2; k < i; k++) {
if (i % k == 0) {
break;
}
}
if (k == i) {
System.out.print(i + "\t");
}
}
}
}
ASCII码的应用,大小写,数字转字符
- 验证码系统,是我在今天学的一个用到了标题技术的例子,下面我分析一下这个具体是怎么使用的,思想是什么。
- 比如我想要生成一个5位的验证码,为了代码的可扩展性,我写了一个方法,用来传入你想生成几位的验证码,传数字即可。
- 具体验证码是怎么生成的,其实我认为有以下几点:
- 明白了以上原理后,我们只需要把生成的字符或者数字放到一起(即在循环外面定义一个空的字符串类型的变量,每次生成的字符串加里面即可生成验证码)在Return即可。
// 调用验证码程序
System.out.println("请输入您想生成的验证码位数:");
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
System.out.println(NumMa(num));
/*生成验证码*/
public static String NumMa(int num) {
String code = "";
Random s = new Random();
for (int i = 0; i < num; i++) {
int type = s.nextInt(3);
switch (type) {
case 0:
//数字
code += s.nextInt(10);
break;
case 1:
//大写字母
char c = (char) (s.nextInt(26) + 65);
code += c;
break;
case 2:
//小写字母
char c1 = (char) (s.nextInt(26) + 97);
code += c1;
break;
}
}
return code;
}
数组的复制
// 调用复制数组程序
int old[] = {20, 30, 40};
int[] newSuzhu=new int[old.length];
copy1(old,newSuzhu);
/*数组的复制*/
public static void copy1(int[] old, int[] newSuzhu) {
System.out.print("原数组为:");
for (int i = 0; i < old.length; i++) {
newSuzhu[i] = old[i];
System.out.print(old[i]+"\t");
}
System.out.print("复制后的数组为:");
for(int i=0;i<newSuzhu.length;i++){
System.out.print(newSuzhu[i]+"\t");
}
}
重温数组排序-冒泡排序法
for (int i = 0; i < score.length; i++) {
for (int k = i + 1; k < score.length; k++) {
if (score[i] > score[k]) {
int temp = score[i];
score[i] = score[k];
score[k] = temp;
}
}
数组之最值,平均值
int score[] = {20, 30, 40};
// 找出数组中的最高分,最低分,求平均分
Score(score);
public static void Score(int[] score) {
//10 20 5 40 50 60 6个评委
int sum = 0;
for (int i = 0; i < score.length; i++) {
for (int k = i + 1; k < score.length; k++) {
if (score[i] > score[k]) {
int temp = score[i];
score[i] = score[k];
score[k] = temp;
}
}
sum += score[i];
}
System.out.println("\n");
System.out.println("最低分为:" + score[0] + "最高分为:" + score[score.length - 1] + "平均分为:" + (double)((sum - score[0] - score[score.length - 1]) / (score.length - 2) ));
}
- 另外一种求最值的方法
for (int x = 0; x < score.length; x++) { // 循环求岀最大和最小 if (score[x] > max) { // 依次判断后续元素是否比max大 max = score[x]; // 如果大则修改max内容 } if (score[x] < min) { // 依次判断后续的元素是否比min小 min = score[x]; // 如果小,则修改min内容 }
交换数组中的位置,正序改倒序排列
for(int k=0,i=nums.length-1;k<i;i--,k++){
int temp=nums[i];
nums[i]=nums[k];
nums[k]=temp;
}
知识点记忆
- 知识点记忆:break在哪个循环体内,作用就是跳出当前的循环体。
- 知识点记忆:想要返回数组,定义的时候别忘加[ ]。
- 知识点记忆:想要随机生成1-20的数字,r.nextint(20)+1。
- 知识点记忆:在一次循环中可能你无法确定想要的值,那么你可以定义一个flag,就可以实现循环完所有情况后,在确定要不要使用该值,此时只需要if(flag)即可。
双色球系统
- 知识点一:随机生成不重复的一组数据,巧用flag。
- 知识点二:数组之间的比对,使用的是(Arrays.equals(lucknums,userinput)
/*双色球系统开发main函数内容*/
int[] luckNums = crateNum();
int count = 1;
for (int luckNum : luckNums) {
System.out.print("第" + count + "位中奖号码为:" + luckNum + "\n");
count++;
}
//获得用户购买的数字
int[] userNums = userInputNumbers();
System.out.print("您最终的号码为:");
for (int userNum : userNums) {
System.out.print(userNum + "\t");
}
System.out.println("\n");
// 比对数字,判断是否中奖
judge(luckNums,userNums);
}
/*双色球的开发*/
public static int[] crateNum() {
int[] nums1 = new int[7];
Random ran1 = new Random();
for (int i = 0; i < nums1.length; i++) {
// 生成1-33之间的随机数,且不能重复10 20 30
while (true) {
int nums2 = ran1.nextInt(33) + 1;
boolean flag = true;
for (int k = 0; k < i; k++) {
if (nums2 == nums1[k]) {
flag = false;/*之所以这里使用flag是因为你需要把整个数组遍历一遍看有没有才能添加,而不是遍历一个发现没有就else添加*/
break;/*这里是跳出for的作用,跳出后while仍然执行,直到随机出不重复的数字出来结束*/
}
}
if (flag) {
nums1[i] = nums2;
break;/*这里是跳出while的作用*/
}
}
}
return nums1;
}
//用户输入7个号码系统
public static int[] userInputNumbers() {
int[] InputeNumbers = new int[7];
Scanner s1 = new Scanner(System.in);
for (int k = 0; k < InputeNumbers.length; k++) {
System.out.println("请您输入一个数字(1-33,不得重复!):");
while (true) {
int temp = s1.nextInt();
boolean flag = true;
for (int j = 0; j < k; j++) {
if (temp == InputeNumbers[j]) {
flag = false;/*之所以这里使用flag是因为你需要把整个数组遍历一遍看有没有才能添加,而不是遍历一个发现没有就else添加*/
System.out.println("输入重复的数字了!!!,请重新输入:");
break;/*这里是跳出for的作用*/
}
}
if (flag) {
InputeNumbers[k] = temp;
break;/*这里是跳出while的作用*/
}
}
}
return InputeNumbers;
}
// 对比用户输入的数字与中奖数字
public static void judge(int[] lucknums, int[] userinput) {
if(Arrays.equals(lucknums,userinput)){
System.out.println("恭喜您中奖了!!!");
}
else{
System.out.println("很遗憾!");
}
}