文章目录
☀️前言☀️
本篇文章主要给大家讲一下方法使用和数组的一些习题。
👦有缘,才相遇,你好!我是hgway_hxz
❤️热爱Java,希望结识更多的小伙伴一起交流
🎉欢迎大家:👍点赞 💬评论 ⭐收藏 💖关注
✉️如果有任何问题欢迎大家在评论区讨论或者私信我
✏️只有微笑才会美丽,只有奔跑才会给力
🔒1.打印X图形
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
输出描述:
针对每行输入,输出用“*”组成的X形图案
💡解题思路:
在类似二维数组的正方格中,对角线打印*,其余打印空格,发现打印 * 的横坐标和纵坐标满足两个条件
1.i == j 2. i + j == n - 1
🔑代码:
public static void printX(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j || i + j == n - 1) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int n = scanner.nextInt();
printX(n);
}
}
🔒2.逆序打印正整数的每一位
💡解题思路:
采用模10除10的方法,以123为例子
123 % 10 = 3
123 / 10 = 12
12 % 10 = 2
12 / 10 = 1
1 % 10 = 1
1 / 10 = 0
🔑代码:
public static void reversePrint(int n) {
while (n != 0) {
System.out.print(n % 10);
n = n / 10;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
reversePrint(n);
}
🔒3.找出数组中只出现一次的数字
一个数组中只有一个数字出现了一次,其余数字出现了两次,找出这个数字
💡解题思路:
采用按位异或的方法:n ^ 0 = n;n ^ n = 0,按位异或满足交换律和结合律,把数组的所有元素按位异或
13 = 0000 0000 0000 0000 0000 0000 0000 1101
0 = 0000 0000 0000 0000 0000 0000 0000 0000
13^0= 0000 0000 0000 0000 0000 0000 0000 1101 = 13
13^13= 0000 0000 0000 0000 0000 0000 0000 0000 = 0
🔑代码:
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 4, 3, 2, 1};
int ret = 0;
for (int i = 0; i < array.length; i++) {
ret = ret ^ array[i];
}
System.out.println(ret);
}
🔒4.分别输出一个数二进制序列中的所有偶数位和奇数位
💡解题思路:
采用按位与,把这个数字的二进制&1,例如13的二进制序列为
13的二进制 | 0 | 0 | 0 | 0 | ………… | 1 | 1 | 0 | 1 |
---|---|---|---|---|---|---|---|---|---|
下标 | 31 | 30 | 29 | 28 | ………… | 3 | 2 | 1 | 0 |
我们以下标为0是奇数从右往左,而打印从左往右
13的奇数位:0000…………0011
13的偶数位:0000…………0010
🔑代码:
public static void printOne(int n) {
//打印奇数位,奇数位下标从30到0
for (int i = 30; i >= 0; i -= 2) {
System.out.print((n >>> i) & 1);
}
System.out.println();
//打印偶数位,偶数位下标从31到1
for (int j = 31; j >= 1; j -= 2) {
System.out.print((n >>> j) & 1);
}
}
public static void main(String[] args) {
printOne(13);
}
结果:
0000000000000011
0000000000000010
Process finished with exit code 0
🔒5.调整数组顺序使得奇数位于偶数之前,调整之后,不关心大小顺序
💡解题思路:
定义数组的第一个元素的下标为left,最后一个元素的下标为right,
如果left下标的元素为奇数就left++,找下一个元素,是偶数循环结束;right下标的元素为偶数就right–,找上一个元素,是奇数循环结束;
left和right都停下来就交换他们的元素,直到left和right相遇。
🔑代码:
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int left = 0;
int right = array.length - 1;
while (left < right) {
while (left < right && array[left] % 2 != 0) {
left++;
}
while (left < right && array[right] % 2 == 0) {
right--;
}
int tmp = array[left];
array[left] = array[right];
array[right] = tmp;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}