Java學習之陣列練習
1、今天同學們相約一起爬山遊玩,為了更好的進行這場活動,大家準備推舉一個人作為出遊的臨時隊長。為了體現合理公平,大家提出了一個比較有趣的規則。所有人圍成一圈,順序排號。從第一個人開始報數(從 1 到 3 報數),凡報到 3 的人退出圈子,剩下的人繼續報數,最後留下的當選為隊長。請你通過編寫程式,求出一組人中的隊長是原來第幾位同學。
package com.day05.homework5;
import java.util.Scanner;
public class Captain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("總共有幾位同學:");
int num = scanner.nextInt();
//定義一個陣列
boolean[] student =new boolean[num];
//陣列長度
int numbers = student.length;
int count=0;//儲存報數
int index=0;//儲存索引下標
//全部排號為true
for (int i = 0; i <student.length; i++) {
student[i]=true;
}
/*
* 開始從1報數
* 如果該同學報數為3,那麼報數count清為0,該學生排號為false,並退出圈子,人數numbers-1,繼續下一輪報數
* 如果報數到最後一位學生,從頭開始
*/
while (numbers>1) {
//如果排號為true的,報數+1
if (student[index] ==true) {
count++;
}
if (count==3) {
count=0;
student[index]=false;
numbers--;
}
index++;
if (index==num) {
index=0;
}
}
//迴圈遍歷找到排號沒有變為false的學生為隊長
for(int i=0;i<student.length;i++) {
if(student[i]==true) {
System.out.println("隊長是第"+(i+1)+"位同學");
}
}
}
}
2、查詢某個整數定義一個長度為 10 的整型陣列 nums ,迴圈輸入 10 個整數。 然後將輸入一個整數,查詢此整數,找到輸出下標, 沒找到給出提示。
package com.day05.homework5;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
System.out.println("請輸入10個整數:");
int [] nums = new int[10];
for (int i = 0; i < nums.length; ) {
System.out.println("第"+(i+1)+"個數字:");
if (scanner.hasNextInt()) {
nums[i] = scanner.nextInt();
i++;
}else {
System.out.println("請輸入一個整數");
}
}
int index=0;//儲存下標
System.out.println("輸入你要找的數字");
int num2 = scanner.nextInt();
for (int i = 0; i < nums.length; i++) {
if (num2==nums[i]) {
index = i;
//System.out.println("該數字的下標為:"+index);
break;
}else {
index=-1;
}
}
if (index!=-1) {
System.out.println("該數字的下標為:"+index);
}else {
System.out.println("數字不存在");
}
}
}
3 、找出陣列的最值定義一個長度為 10 的整型陣列 nums ,迴圈輸入 10 個整數。輸出陣列的最大值、最小值。
package com.day05.homework5;
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
int [] nums = new int[10];
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入10位數:");
for (int i = 0; i < nums.length; i++) {
System.out.println("請輸入第"+(i+1)+"個數字");
if (scanner.hasNextInt()) {
nums[i]=scanner.nextInt();
}else {
System.out.println("請輸入一個整數:");
}
}
int max=nums[0];
int min=nums[0];
for (int i = 1; i < nums.length; i++) {
if (max<nums[i]) {
max=nums[i];
}
if (min>nums[i]) {
min=nums[i];
}
}
System.out.println("最大值為:"+max);
System.out.println("最小值為:"+min);
}
}
4 、兩數之和給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並輸出他們的陣列下標,假設每種輸入只會對應一個答案,不能重複利用這個陣列中同樣的元素。示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以輸出 0,1
package com.day05.homework5;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
System.out.println("請輸入4個整數:");
int [] nums = new int[4];
for (int i = 0; i < nums.length;) {
System.out.println("第"+(i+1)+"個數字:");
if (scanner.hasNextInt()) {
nums[i] = scanner.nextInt();
i++;
}else {
System.out.println("請輸入一個整數");
}
}
System.out.println("請輸入目標值:");
int target=0;
if (scanner.hasNextInt()) {
target = scanner.nextInt();
for (int i = 0; i < nums.length; i++) {
for (int j = i+1; j < nums.length; j++) {
if (nums[i]+nums[j]==target) {
System.out.println("兩個數相加等於目標值的下標分別為:");
System.out.println(i+","+j);
break;
}
}
}
}else {
System.out.println("請正確輸入一個整數");
}
}
}
5、排序並查詢對陣列{1,3,9,5,6,7,15,4,8}進行排序,然後使用二分查詢 輸入目標值 並輸出排序後的下標。
package com.day05.homework5;
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
int [] nums={1,3,9,5,6,7,15,4,8};
int temp=0;
/**
* 陣列排序
*/
//外層迴圈輪數
for (int i = 0; i < nums.length-1; i++) {
//每輪比較次數
for (int j = 0; j < nums.length-i-1; j++) {
if (nums[j]>nums[j+1]) {
temp =nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
//遍歷陣列
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+",");
}
/**
* 使用二分法查詢目標值
*/
System.out.println();
System.out.println("請輸入你要查詢的資料:");
Scanner scanner = new Scanner(System.in);
//儲存輸入目標值
int target=0;
if (scanner.hasNextInt()) {
target = scanner.nextInt();
}else {
System.out.println("請正確輸入一個整數");
}
int minIndex=0;//最小下標
int maxIndex=nums.length-1;//最大下標
int centerIndex=(maxIndex+minIndex)/2;//中間下標
while (true) {
if (nums[centerIndex]>target) {
maxIndex=centerIndex-1;
}else if (nums[centerIndex]<target) {
minIndex=centerIndex+1;
}else {
break;
}
if (minIndex>maxIndex) {
centerIndex=-1;
}
centerIndex=(maxIndex+minIndex)/2;
}
if (centerIndex!=-1) {
System.out.println("值的下標為:"+centerIndex);
}
}
}
6、移動零給定一個陣列 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0]
package com.day05.homework5;
public class Demo5 {
public static void main(String[] args) {
int[] nums={0,34,0,3,12};
int temp=0;
/**
* 陣列排序
*/
//外層迴圈輪數
for (int i = 0; i < nums.length-1; i++) {
//每輪比較次數
for (int j = 0; j < nums.length-i-1; j++) {
if (nums[j]>nums[j+1]) {
temp =nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
//遍歷陣列
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+" ");
}
System.out.println("");
System.out.println("移動後如下:" );
for(int i=0;i<nums.length;i++){
if (nums[i]==0) {
int j=i+1;//非0數字的下標
while (j<nums.length) {
if (nums[j]!=0) {
nums[i]=nums[j];
nums[j]=0;
break;
}else {
j++;
}
if (j==nums.length) {
break;
}
}
}
System.out.print(nums[i]+" ");
}
}
}
相關文章
- Java學習筆記——陣列練習(七)Java筆記陣列
- JAVA 陣列 練習Java陣列
- Java學習之陣列Java陣列
- Java學習筆記之陣列Java筆記陣列
- 陣列練習題陣列
- java資料結構學習之陣列Java資料結構陣列
- 【Java學習筆記之五】java陣列詳解Java筆記陣列
- java基礎學習之七:陣列型別Java陣列型別
- 二維陣列練習陣列
- Java學習之基礎語法練習Java
- Java學習之for迴圈列印菱形練習Java
- PHP 學習總結之陣列PHP陣列
- swift 學習筆記之陣列Swift筆記陣列
- 陣列學習陣列
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- PHP陣列學習之計算陣列元素總和PHP陣列
- Java基礎學習之陣列基本屬性和方法Java陣列
- 大資料之JAVA基礎(五):迴圈和陣列方法練習大資料Java陣列
- 指標陣列練習排列字串指標陣列字串
- 陣列的學習陣列
- plsql陣列學習SQL陣列
- 笨辦法學C 練習34:動態陣列陣列
- 笨辦法學C 練習8:大小和陣列陣列
- Java之反射--練習Java反射
- 學習JSON陣列JSON陣列
- PHP學習3——陣列PHP陣列
- c# 陣列學習C#陣列
- java學習室SCJP線上練習Java
- Java學習之流程控制練習Java
- 【Numpy學習08】陣列迭代陣列
- JS陣列學習筆記JS陣列筆記
- gcc 0長陣列學習GC陣列
- C#學習 陣列(22)C#陣列
- Java陣列小練筆Java陣列
- 流程控制與陣列—Java基礎學習(二)陣列Java
- Java學習筆記【1】陣列的宣告和建立Java筆記陣列
- 深入學習js之——類陣列物件與arguments #11JS陣列物件
- Go 語言學習筆記之陣列與切片Go筆記陣列