自学Java---基础语法---第七天

循环练习

编写程序求 1+3+5+7+……+99 的和值。
public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            //如果是奇数  则累加
            if (i % 2 != 0) {
                sum += i;
            }
        }
        System.out.println(sum);
    }
}
输出所有的水仙花数,所谓水仙花数是指一个数3位数,其每位数字立方和等于其本身,如153 = 1 * 1 * 1 + 3 * 3 * 3 + 5 * 5 * 5

明确什么样的数就是水仙花数。水仙花数是指一个3位数(100-999之间),其每位数字立方之和等于该3位数本身。如153 = 1 * 1 * 1 + 3 * 3 * 3 + 5 * 5 * 5,即 3位数本身 = 百位数立方 + 十位数立方 + 个位数立方;

public class Test {
//当我把i的取值范围调整成一万时  会输出一个1001 没搞明白什么原因
    public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) {
            int a = i / 100;//百位数
            int b = i / 10 % 10;//十位数
            int c = i % 10;//个位数
            if ((a*a*a+b*b*b+c*c*c)==i){
                System.out.println(i);
            }
            //通过百度,得知循环条件可以用math工具类中的pow方法代替
            if ((Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3))==i){
                System.out.println(i);
            }
        }
    }
}

SCII编码表

American Standard Code for Information Interchange,美国标准信息交换代码. 在计算机中,所有的数据在存储和运算时都要使用二进制数表示, a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号, 在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
在这里插入图片描述
数字0-9对应ASCII编码十进制为48-57, 字母a-z对应ASCII编码十进制为97-122,字母A-Z对应ASCII编码十进制为65-90

利用for循环打印ABCDEFG…XYZ,26个大写字母与26个小写字母
public class Test {
    public static void main(String[] args) {
        char up = 'A';
        char low = 'a';
        for (int i = 0; i < 26; i++) {
            System.out.println("大写字母 "+up+" ,小写字母 "+low);
            up++;
            low++;
        }
    }
}
利用for循环打印 9*9 表?
public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }
}

数组方法的练习

定义打印数组元素方法,按照给定的格式打印[11, 33, 44, 22, 55]
public class Test {
    public static void main(String[] args) {
        int[] arr = {11, 33, 44, 22, 55};
        printArr(arr);
        //也可以直接调用工具类Arrays中的tostring方法进行打印
        //System.out.println(Arrays.toString(arr));
    }

    public static void printArr(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if ((arr.length - 1) != i) {
                System.out.print(arr[i] + ",");
            } else {
                System.out.print(arr[i] + "]");
            }
        }
    }
}

数组元素逆序
public class Test {
    public static void main(String[] args) {
        int[] arr = {23, 34, 45, 56, 67, 78, 89};
        printArr(arr);
    }

    public static void printArr(int[] arr) {
        int count = arr.length - 1;
        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[count];
            arr[count] = temp;
            count--;
        }
        //for里的条件也可以换成(int start=0,end=arr.length-1;start<end;start++,end--)
        // 替换后就不需要开始的int count = arr.length-1;
//        for (int start=0,end=arr.length-1;start<end;start++,end--) {
//            int temp = arr[start];
//            arr[start]=arr[end];
//            arr[end]=temp;
//            count--;
//        }
        System.out.println(Arrays.toString(arr));
    }
}

数组元素选择排序
public class Test {
    public static void main(String[] args) {
        int[] arr = {13,46,22,65,3};
        printArr(arr);
    }

    public static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i+1; j < arr.length; j++) {
                if (arr[i]>arr[j]){
                    int temp = arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
数组元素冒泡排序
public class Test {
    public static void main(String[] args) {
        int[] arr = {13, 46, 22, 65, 3};
        printArr(arr);
    }

    public static void printArr(int[] arr) {
        //功能
        //外层循环用来控制数组循环的圈数
        for (int i = 0; i < arr.length - 1; i++) {
            //j < arr.length-1 为了避免角标越界
            //j < arr.length-1-i 为了比较效率,避免重复比较
            //内层循环用来完成元素值比较,把大的元素值互换到后面
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
                System.out.println(Arrays.toString(arr));
            }
        }
    }
}

数组元素普通查找
public class Test {
    public static void main(String[] args) {
        int[] arr = {23, 34, 45, 56, 67, 78, 89};
        int index = printArr(arr,56);
        System.out.println(index);
    }

    public static int printArr(int[] arr, int num) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]==num){
               //找到了
                return i;
            }
        }
        return -1;
    }
}
数组元素二分查找(折半查找)

注意:使用二分查找的数组必须是有序的

public class Test {
    public static void main(String[] args) {
        int[] arr = {23, 34, 45, 56, 67, 78, 89};
        int a = printArr(arr,89);
        System.out.println(a);
    }

    public static int printArr(int[] arr, int key) {
        int low = 0;
        int high = arr.length - 1;
        int middle = 0;			//定义middle

        if(key < arr[low] || key > arr[high] || low > high){
            return -1;
        }

        for (int i = 0; i < arr.length/2; i++) {
            middle = (low + high) / 2;
            if(arr[middle] > key){
                //比关键字大则关键字在左区域
                high = middle -1;
            }else if(arr[middle] < key){
                //比关键字小则关键字在右区域
                low = middle +1;
            }else{
                return middle;
            }
        }
        return -1;
    }
}

作业

1.分析以下需求,并用代码实现:
(1)按照从大到小的顺序输出四位数中的个位+百位=十位+千位(3553,2332,1166,8228,3773)的数字及个数
(2)每行输出5个满足条件的数,之间用空格分隔
(3)如:9999 9988 9977 9966 9955

public class Test {
    public static void main(String[] args) {
        printDemo();
    }

    public static void printDemo() {
        int count = 0;
        for (int i = 1000; i <= 9999; i++) {
            if ((i % 10 + i / 100 % 10) == (i / 10 % 10 + i / 1000)) {
                count++;
                if (count == 5) {
                    System.out.print(i);
                    System.out.println();
                    count = 0;
                } else {
                    System.out.print(i + " ");
                }
            }
        }
    }
}

2.分析以下需求,并用代码实现:
(1)倒着打印九九乘法表

public class Test {
    public static void main(String[] args) {
        printMultiplicationTable();
    }

    public static void printMultiplicationTable(){
        for (int i = 9; i > 0; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }
}

运行效果:
1 * 9=9 2 * 9=18 3 * 9=27 4 * 9=36 5 * 9=45 6 * 9=54 7 * 9=63 8 * 9=72 9 * 9=81
1 * 8=8 2 * 8=16 3 * 8=24 4 * 8=32 5 * 8=40 6 * 8=48 7 * 8=56 8 * 8=64
1 * 7=7 2 * 7=14 3 * 7=21 4 * 7=28 5 * 7=35 6 * 7=42 7 * 7=49
1 * 6=6 2 * 6=12 3 * 6=18 4 * 6=24 5 * 6=30 6 * 6=36
1 * 5=5 2 * 5=10 3 * 5=15 4 * 5=20 5 * 5=25
1 * 4=4 2 * 4=8 3 * 4=12 4 * 4=16
1 * 3=3 2 * 3=6 3 * 3=9
1 * 2=2 2 * 2=4
1 * 1=1

3.分析以下需求,并用代码实现:
(1) 计算15+25+35+....+1005的和
public class Test {
    public static void main(String[] args) {
        printSum();
    }

    public static void printSum(){
        //计算15+25+35+....+1005的和
        System.out.println();
        int i =15;
        int sum = 0;
      while (true){
            sum+=i;
            if (i==1005){
                System.out.println(sum);
                return;
            }else {
                i+=10;
            }
        }
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值