黑马java有关数组的几道感觉比较难的题目,记录一下。
第一题
现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。依次类推。请编写程序计算,这个数组所表示的整数值。例如:
数组:{2, 1, 3, 5, 4}
表示的整数为:21354 // 注:是整数类型的两万一千三百五十四,不是字符串拼起来的。
思路:索引0对应的数乘10,索引1对应的数乘100,依次类推
package com.itheima.homework;
public class hm4 {
public static void main(String[] args) {
//现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,
// 从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。
// 依次类推。请编写程序计算,这个数组所表示的整数值
//定义数组
int[] arr = {4, 1, 3, 5, 4, 5, 6};
//定义一个数存储整数值,int表示的范围会不会太小
long sum = 0;
//定义一个数表示要乘多少次10(是多少次而不是多少个)
//int count = 1;
//计算整数值
for (int i = arr.length - 1; i >= 0; i--) {
int count = arr.length - 1 - i;
for(; count > 0; count--){
arr[i] = arr[i] * 10;
}
sum = sum + arr[i];
}
//输出结果
System.out.println("number = " + sum);
}
}
例图:
第二题
有一个数组,其中有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。要求:把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。执行效果如下:
请输入一个整数数字:
50
生成的新数组是:12 14 23 45 50 66 68 70 77 90 91
训练提示
- 数组的长度是不能改变的,所以增加一个元素需要定义一个新数组。
- 数组元素是从小到大排列的,如何找到新元素存放的位置?
package com.itheima.homework;
import java.util.Scanner;
public class hm6 {
public static void main(String[] args) {
//有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}
//通过键盘录入一个整数数字
//把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。
//已知的数组
int[] arr1 = {12,14,23,45,66,68,70,77,90,91};
//定义未知的数组
int[] arr2 = new int[arr1.length + 1];
//输入整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = sc.nextInt(); //接收整数
//记录索引位置的值
int index = 0;
boolean flag = false; //如果结束后还是flase,则表示num是最小的
//找出整数在新数组中的位置
for (int i = 0; i < arr1.length; i++) {
if(num > arr1[i]){
flag = true;
index = i + 1;
}
}
//给新的数组赋值
if(flag == false){
arr2[0] = num;
for (int i = 0; i < arr1.length; i++) {
arr2[i + 1] = arr1[i];
}
}else{
for (int i = 0; i < index; i++) {
arr2[i] = arr1[i];
}
arr2[index] = num;
for(int i = index + 1; i < arr2.length; i++){
arr2[i] = arr1[i - 1];
}
}
//输出结果
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i] + " ");
}
}
}
第三题
定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)
解题方案
-
定义一个新数组。把原数组的奇数放在新数组的左边,把原数组的偶数放在新数组的右边。
-
不定义新数组。找到左边的偶数,和右边的奇数互换位置。
第二个解题方案我更熟悉
package com.itheima.homework;
public class hm7 {
public static void main(String[] args) {
//定义一个数组其中包含多个数字。
// 用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。
//不定义新数组。找到左边的偶数,和右边的奇数互换位置。
//定义一个数组
int[] arr = {12,14,23,45,66,68,70,77,90,91};
//定义左右两个索引指针
int left = 0;
int right = arr.length - 1;
//用于交换数值
int temp = 0;
//开始换位置,当left等于right结束换位置
//只有交换了right才减减
//只有没交换时(即为偶数时),left才加加
for(;left < right;){
if(arr[left] % 2 != 0){ //即为奇数
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
right--;
}else{ //为偶数的话指针向右挪一位
left++;
}
}
//输出
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
欢迎交流,有错误欢迎指正!
标签:练习题,arr,java,int,笔记,length,整数,数组,arr2 From: https://blog.csdn.net/weixin_74143480/article/details/142770449