Java基础有趣的例题

451 阅读5分钟

交换两个变量的值

public class Change{
	public static void main(String[] args){
        int x=10,y=20;
        //方法一
        int z=x;//定义一个临时变量
        	x=y;
       	    y=z;
        //方法二,好处:不用定义新变量,节省内存空间
        //弊端:相加操作可能超出范围,有局限性只能是数值,不能是其他形式(方法一则是通用)
        x=x+y;//两个相加为30
        y=x-y;//30减去原先y的值结果为原先x的值
        x=x-y;//30减去现在y的值(即之前x的值)结果为原先y的值
        //方法三,了解即可,基本不用,只能用于整数
        x=x^y;//(m^n)^n=m
        y=x^y;//相当于(x^y)^y值为x,将x的值给了y
        x=x^y;//现在的y是原先x的值,相当于(x^y)^x,值为原先y的值
    }
}

三位数交换

import java.util.Scanner;//导包时注意分号******
/**
 * 由键盘输入三个整数分别存入变量num1、num2、num3,将它们进行排序(使用if-else if-else),并且从小到大输出
 */
public class ifTxetTwo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("从键盘输入三个整数");
        int num1 = scan.nextInt(), num2 = scan.nextInt(), num3 = scan.nextInt();
        //我的方法(从第二个if开始都else),比较大小,交换顺序,不正确,(使用if-else if-else)只选择一个
        int temp;//交换顺序,必须按照这个思路来,不能换顺序
        if (num1 > num2) {
            temp = num1;
            num1 = num2;
            num2 = temp;
        }
        if (num1 > num3) {//这个和下面换顺序就会出问题
            temp = num1;
            num1 = num3;
            num3 = temp;
        }
        if (num2 > num3) {
            temp = num2;
            num2 = num3;
            num3 = temp;
        }
        System.out.println("从大到小输出:" + num3 + "  " + num2 + "  " + num1);

        //6中情况列出来(先确定两个的位置,然后第三个数往里插入)
        if (num1 >= num2) {
            if (num3 >= num1)
                System.out.println(num2 + ", " + num1 + "," + num3);
             else if (num3 <= num2)
                System.out.println(num3 + ", " + num2 + "," + num1);
             else
                System.out.println(num2 + ", " + num3 + ", " + num1);

        } else {
            if (num3 >= num2)
                System.out.println(num1 + "," + num2 + "," + num3);
             else if (num3 <= num1)
                System.out.println(num3 + "," + num1 + "," + num2);
             else
                System.out.println(num1 + ", " + num1 + ", " + num3);
        }
    }
}

彩票(if—else)(随机数)

假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,然后按照下面的规则判定用户是否能赢。

  • 1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
  • 2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金3000美元。
  • 3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1000美元。
  • 4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
  • 5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。
import java.util.Scanner;

public class IfTextThree {
    public static void main(String[] args){
        //取随机数
        //double value=Math.random();//注意Math的m需要大写,范围[0.0,1.0)
        //double value=Math.random()*90+10;//将[0.0,1.0)*90拓展到[0.0,90.0)再+10变为[10.0,100.0)
        int value=(int)(Math.random()*90+10);//题目中要求是整数,用强制类型转换,结果变为[10,99]因为100是开区间取不到强转舍去小数部分
        //随机数公式区间:[a,b]   (数据类型)(Math.random()*(b-a+1)+a);本身是double型
        Scanner scan=new Scanner(System.in);
        System.out.println("请随机输入一个两位数");
        int get=scan.nextInt();
        if(get==value)
            System.out.println("奖金10000$");
        else{
            int ge=value%10,shi=value/10;
            int ge1=get%10,shi1=get/10;
            if(ge*10+shi==get)
                System.out.println("奖金3000$");
            else if(ge1==ge||shi1==shi)
                System.out.println("奖金1000$");
            else if(shi1==ge||ge1==shi)
                System.out.println("奖金500$");
            else
                System.out.println("无奖金");
        }
        System.out.println(value);
    }
}

高富帅问题(字符串比较)

大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出定的条件:高:180cm以上;富:财富1千万以上;帅:是。

  • 如果这三个条件同时满足,则:“我一定要嫁给他!!”
  • 如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。
  • ”如果三个条件都不满足,则:“不嫁!”
import java.util.Scanner;

public class IfTextFour {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        System.out.println("请您输入身高 xxx cm");
        int height= scan.nextInt();
        System.out.println("请输入财富(万)");
        int rich= scan.nextInt();
        System.out.println("请输入长相帅否,帅true,否false");
        boolean yesno = scan.nextBoolean();
        if(height>=180&&rich>=1000&&yesno==true)//第三个可以直接写成&&yesno
            System.out.println("我一定要嫁给他!!");
        else if(height>=180||rich>=1000||yesno==true)
            System.out.println("嫁吧,比上不足,比下有余。");
        else
            System.out.println("不嫁!");
        /**
         * 判断用户输入的字符串是否和我们想的一样
         * 变量名.equals("是")
         * 注意:结果是boolean类型
         * 例子
         */
         String panduan="中";
         boolean trueis=panduan.equals("中");
         System.out.println(trueis);
    }
}

判断是否是闰年

import java.util.Scanner;
public class IsYearText {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        System.out.println("输入年份");
        int year=scan.nextInt();
        //方法一
        if(year%100!=0){
            if(year%400==0)
                System.out.println("是闰年");
            else
                System.out.println("不是闰年");
        }else {
            if (year % 4 == 0)
                System.out.println("是闰年");
            else
                System.out.println("不是闰年");
        }
        //(简单)方法二
       if((year%4==0&&year%100!=0)||year%400==0){
           System.out.println("是闰年");
       }else{
           System.out.println("不是闰年");
       }
    }
}

水仙花数打印(各位数字的取出)

/**
 * 输出所有的水仙花数
 * 水仙花数:一个三位数(各个位上的立方和为这个数)
 * abc=a*a*a+b*b*b+c*c*c
 */
public class FlowerMunber {
    public static void main(String[] args){
        for(int i=100;i<=999;i++){
            int a=i/100,b=i/10%10,c=i%10;
            if(i==a*a*a+b*b*b+c*c*c){//注意双等号
                System.out.println(i);
            }
        }
        //给出一个整数,打印十位数,个位数,百位数的值
        int z=234;
        System.out.println("个位数:"+z%100%10+"十位数:"+z%100/10+"百位数:"+z/100);//十位也可z/10%10,个位z%10
    }
}

最大公约数、最小公倍数

import java.util.Scanner;
/**
 * 输入两个正整数m,n求其最大公约数和最小公倍数
 */
public class ForText1 {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int m= scan.nextInt(),n= scan.nextInt();
        //最大公约数
        for(int i=m;i>=1;i--){
            if(m%i==0){
                if(n%i==0) {
                    System.out.println(i);
                    break;
                }
            }
        }
        //最小公倍数
        for(int i=m;i<=n*m;i++){
            if(i%m==0){//两个if可以合并成一个if(i%m==0&&i%n==0)
                if(i%n==0){
                    System.out.println(i);
                    break;
                }
            }
        }

    }
}

输出*号塔(找规律)

**
 * 输出结果:   *               三个空格,一个*
 *            * *              两个空格,*空格*
 *           * * *
 *          * * * *
 *           * * *
 *            * *
 *             *
 * 这种类型的题注意找规律
 */
public class ExeFor1 {
    public static void main(String[] args){
        //上半部分
        for(int i=1;i<=4;i++){
            for(int j=1;j<=4-i;j++){
                System.out.print(" ");
            }
            for(int j=1;j<=i;j++){
                System.out.print("* ");
            }
            System.out.println();
        }
        //下半部分
        for(int i=1;i<=3;i++){
            for(int j=1;j<=i;j++){
                System.out.print(" ");
            }
            for(int j=1;j<=4-i;j++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

九九乘法表

/**
 * 打印99乘法表
 */
public class For99 {//左上和左下打印完成、右上和右下未完成(过段时间再思考)
    public static void main(String[] args){
        //打印全部
        for(int i=1;i<=9;i++){
            for(int j=1;j<=9;j++){
                System.out.print(i+"*"+j+"="+i*j+'\t');//Java中的\t和C中一样,但注意“”是原样输出,要用单引号
            }
            System.out.println();//注意Java中的println和print的区别
        }
        System.out.println("***********************************");
        //打印左下
        for(int i=1;i<=9;i++){
            for(int j=1;j<=i;j++){
                System.out.print(i+"*"+j+"="+i*j+'\t');
            }
            System.out.println();
        }
        System.out.println("***********************************");
        //打印左上
        for(int i=1;i<=9;i++){
            for(int j=1;j<=9-i+1;j++){
                System.out.print(i+"*"+j+"="+i*j+'\t');
            }
            System.out.println();
        }
        System.out.println("***********************************");
        //打印右下(未完成)
        for(int i=1;i<=9;i++){
            for(int k=1;k<=9-i;k++){
                System.out.print('\t');
            }
            for(int j=1;j<=i;j++){
                System.out.print(i+"*"+j+"="+i*j+'\t');
            }
            System.out.println();
        }
        System.out.println("***********************************");
        //打印左上(第二种方法)
        for(int i=1;i<=9;i++){
//            for(int k=i;k<=9;k++){
//                System.out.print('\t');
//            }
            for(int j=i;j<=9;j++){
                System.out.print(i+"*"+j+"="+i*j+'\t');
            }
            System.out.println();
        }
        System.out.println("***********************************");
        //打印金字塔
        for(int i=1;i<=9;i++){
            for(int k=1;k<=9-i;k++){
                System.out.print('\t');
            }
            for(int j=1;j<=i;j++){
                System.out.print(i+"*"+j+"="+i*j+'\t');
            }
            System.out.println();
        }
    }
}

输出质数(并通过计算时间来计算效率)(获取毫秒数)

/**
 * 打印100以内的所有质数
 * 并运算效率
 */
public class For100zhi {
    public static void main(String[] args){
        //boolean flag=true;//flag判断应放在第一层循环里面,否则上一次的结果会影响下一次循环
        long srart=System.currentTimeMillis();//获取当前的毫秒数(距离1970年1月1日00:00:00的毫秒数)
        int count=0;
        for(int i=2;i<=10000;i++){//注意:1不是质数,最小的质数是2
            boolean flag=true;
            for(int j=2;j<=i/2;j++){//也可以写根号下i,写法:Math.sqrt(i);
                if(i%j==0){
                    flag=false;
                    break;//break的作用是跳出for循环,而不是跳出if,没有这个作用
                    //System.out.println(i);//break、continue后面不能声明执行语句,否则编译都过不去
                }
            }
            if(flag)
                System.out.println(i);
                //count++;
        }
        //System.out.println(count);
        long end=System.currentTimeMillis();//获取当前的毫秒数(距离1970年1月1日00:00:00的毫秒数)
        System.out.println(end-srart);//结果单位是毫秒 1s=1000ms
        //输出语句很占运行速度,只计数(14毫秒),含输出语句(24毫秒)
        System.out.println("***********************");//质数输出,方式二(更简单一点)代码量更少
        lab:for(int i=2;i<=10;i++){//注意:1不是质数,最小的质数是2
                for(int j=2;j<=i/2;j++){//也可以写根号下i,写法:Math.sqrt(i);
                    if(i%j==0){
                        continue lab;
                    }
                }
                //执行到此步骤都是质数
                System.out.println(i);
            }
    }
}