day05
知識點
數組
題目1
請創建一個長度為6的整數數組,并為數組中的元素賦值。遍歷數組,打印所有元素,元素之間用空格隔開。比如:
數組為:{1,2,3,4,5}
打印結果:1 2 3 4 5
訓練提示
1、數組中的元素有索引,開始索引和結束索引分別是什么?使用循環語句,依次通過索引獲取元素即可遍歷數組。
2、在打印數組元素時,是以空格分隔,并且不換行,該怎樣輸出?
解題方案
for循環遍歷數組
操作步驟
1、定義int數組,使用靜態初始化方式為元素賦值。
2、使用for循環對數組進行遍歷,循環索引從0開始,到數組的長度-1結束。
3、逐個打印數組元素,打印元素不換行,在輸出元素的后面拼接空格。
參考答案
public class HomeWork {
static void main() {
//定義一個長度為6的數組
int[] arr = new int[6];
//遍歷數組并賦值
for (int i = 0; i < arr.length - 1; i++) {
arr[i] = i + 1;
}
//打印所有的元素
for (int i = 0; i < arr.length - 1; i++) {
System.out.print(arr[i] + " ");
}
}
}
題目2
現有一個小數數組{12.9, 53.54, 75.0, 99.1, 3.14}。請編寫代碼,找出數組中的最小值并打印。
訓練提示
1、數組的元素是小數,需要定義小數類型數組。
2、找最值需要先定義一個參考值,然后依次拿每個值與參考值比較即可。
解題方案
將數組的第一個值作為參考值,遍歷數組,依次比較,記錄更小值。
操作步驟
1、定義double類型數組并存入元素。
2、定義double類型變量min代表最小值,初始化為數組第一個值。
3、遍歷數組,用每個元素依次和變量min對比。
4、如果發現有元素小于min,則把該元素賦值給min。
5、遍歷結束之后min記錄的就是最小值,打印結果。
參考答案
public class HomeWork {
static void main() {
//定義一個數組
double[] arr = {12.9,53.54,75.0,99.1,3.14};
//定義一個變量用于臨時儲存最小值
double min = arr[0];
//遍歷數組并比較大小
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
System.out.println("最小值為:" + min);
}
}
題目3
創建一個長度為6的整數數組。請編寫代碼,隨機生成六個0(包含)-100(不包含)之間的整數存放到數組中,然后計算出數組中所有元素的和并打印。
訓練提示
1、數組有6個元素,那么就要生成6次隨機數。
2、要求所有元素的和,首先需要定義變量來存儲求和結果,然后再獲取所有元素,依次累加就可以了。
解題方案
定義求和變量,遍歷數組,累加元素值。
操作步驟
1、定義長度為6的int數組。
2、創建隨機數Random類對象。
3、遍歷數組,在循環中生成隨機數并給數組元素賦值。
4、定義求和變量,初始化值為0。
5、遍歷數組,獲取每一個元素,累加。
6、遍歷結束,打印結果。
參考答案
import java.util.Random;
public class HomeWork {
static void main() {
//定義一個長度為6的數組
int[] arr = new int[6];
//遍歷數組并隨機生成一個數賦值
Random rand = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = rand.nextInt(101);
System.out.print(arr[i] + " ");
}
//定義一個變量表示和
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum +=arr[i];
}
System.out.println("數組和為:" + sum);
}
}
題目4
現有一個整數數組,數組中的每個元素都是[0-9]之間的數字,從數組的最大索引位置開始到最小索引位置,依次表示整數的個位、十位、百位。。。依次類推。請編寫程序計算,這個數組所表示的整數值。例如:
數組:{2, 1, 3, 5, 4}
表示的整數為:21354 // 注:是整數類型的兩萬一千三百五十四,不是字符串拼起來的。
訓練提示
1、首先肯定要獲取數組的每一個元素,需要遍歷。
2、根據題目分析,個位元素本身就可以表示值,十位是元素乘以10來表示值,百位就是元素乘以100來表示值。。。它們之間有什么規律呢?從左至右,每一位所表示的值是下一位的十倍。根據此規律,怎樣編寫算法實現呢?
解題方案
遍歷數組,與求和的思路相似,但算法不同,累加時需要將高位*10再累加。
操作步驟
1、定義int類型數組,使用靜態初始化,將數字存入數組。
2、定義變量num用來存儲最終的數值。
3、對數組進行遍歷,遍歷開始索引是0,結束索引是arr.length-1。
4、在循環中,把num的值乘10再加上元素的值,賦值給num變量。
5、循環上面的步驟,num的值即為所求,打印結果。
參考答案
import java.util.Random;
public class HomeWork {
static void main() {
//定義數組
int[] arr = {2,1,3,5,4};
//定義一個變量表示數組所代表的整數
int sum = 0;
//遍歷數組,前一位乘上10再加1
for (int i = 0; i < arr.length; i++) {
sum = sum * 10 + arr[i];
}
System.out.println("表示整數為:" + sum);
}
}
題目5
定義一個數組來存儲10個學生的成績,例如:{72, 89, 65, 87, 91, 82, 71, 93, 76, 68}。計算并輸出學生的平均成績。
訓練提示
1、要操作數組的每一個元素,需要遍歷。
2、怎樣求平均數?其實只要求和之后也就知道了平均數。
解題方案
使用數組的遍歷操作完成。
操作步驟
- 定義保存學生成績的數組arr。
- 定義變量sum用來存儲和。
- 對數組進行遍歷,求和。
- 和除以元素個數得到平均數。
- 打印結果。
參考答案
import java.util.Random;
public class HomeWork {
static void main() {
//定義一個數組存儲學生成績
int[] arr = {72,89,65,87,91,82,71,93,76,68};
//定義一個變量表示和
int sum = 0;
//定義一個變量表示平均數
double avg = 0;
//遍歷數組
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
avg = (double) sum / arr.length;
System.out.println("平均數為:" + avg);
}
}
題目6(很難)
有一個數組,其中有十個元素從小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通過鍵盤錄入一個整數數字。要求:把數字放入數組序列中,生成一個新的數組,并且數組的元素依舊是從小到大排列的。執行效果如下:
請輸入一個整數數字:
50
生成的新數組是:12 14 23 45 50 66 68 70 77 90 91
訓練提示
- 數組的長度是不能改變的,所以增加一個元素需要定義一個新數組。
- 數組元素是從小到大排列的,如何找到新元素存放的位置?
解題方案
? 使用數組的遍歷,用元素依次和數字作比較,找到正確的存放位置。
操作步驟
- 定義原數組arr,和一個比原數組長度大1的新數組brr。
- 通過鍵盤錄入的方式輸入變量num的值。
- 定義變量index用于記錄num存放的索引位置。
- 遍歷數組,小于或等于num的元素直接存放到原來的位置,大于num的元素往后移動一個位置。
- 存放結束之后,中間會空出一個位置,在遍歷時用index記錄這個位置。把num放在這個索引處。
- 最終遍歷新數組打印結果。
參考答案
import java.util.Scanner;
public class HomeWork {
static void main() {
//定義一個數組
int[] arr = {12,14,23,45,66,68,70,77,90,91};
//再定義一個數組用來存儲新的數組
int[] arr1 = new int[arr.length + 1];
//鍵盤錄入一個數
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個整數數字");
int number = sc.nextInt();
//遍歷數組將鍵盤錄入的數字和原數組中的數字進行比較
//若比原數組的數字大,繼續比較,若比原數組的數字小,則把該數字放在該索引
//定義變量表示目標索引的位置
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (number >= arr[i]) {
arr1[i] = arr[i];
//記錄索引位置
index = i + 1;
}
else{
arr1[i + 1] = arr[i];
}
}
//
arr1[index] = number;
System.out.println("生成的新數組為: ");
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
}
}
題目7(很難)
定義一個數組其中包含多個數字。用自己的方式最終實現,奇數放在數組的左邊,偶數放在數組的右邊。(可以創建其他數組,不必須在原數組中改變)
訓練提示
- 要找奇數和偶數只需要判斷對2取余即可。
- 找到一個奇數或偶數之后,把它放在哪個索引處?
解題方案
-
定義一個新數組。把原數組的奇數放在新數組的左邊,把原數組的偶數放在新數組的右邊。
-
不定義新數組。找到左邊的偶數,和右邊的奇數互換位置。
以下以方案1為準
操作步驟
- 定義出原數組arr,其中包含多個數字。
- 定義新數組brr,和arr的長度一樣。
- 定義變量left,初始值是0準備從左邊放元素,定義變量right,初始值是arr.length-1準備從右邊放元素。
- 對原數組arr進行遍歷。
- 如果元素是奇數,則放在新數組brr的左邊,left變量加一。
- 如果元素是偶數,則放在新數組brr的右邊,right變量減一。
- 遍歷新數組brr打印最終結果。
參考答案
public class HomeWork {
static void main() {
//定義數組
int[] arr = {1,2,3,4,5,6,7,8,9,10};
//定義新數組
int[] arr1 = new int[10];
//定義兩個變量分別表示放在新數組的左邊和右邊
int left = 0;
int right = arr.length-1;
//遍歷數組并判斷奇數還是偶數,奇數放左邊偶數放右邊
for (int i = 0; i < arr.length; i++) {
if(arr[i] % 2 != 0){
arr1[left] = arr[i];
left++;
}else{
arr1[right] = arr[i];
right--;
}
}
System.out.println("新數組為: ");
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i]+" ");
}
}
}
浙公網安備 33010602011771號