陣列定義及例題——java(輸大於平均值;投票統計;遍歷陣列;高效率素數;tic—tac-toe遊戲)
1.陣列的定義
陣列是一種放東西的容器,特點有:
a.其中所有元素是相同的資料型別
b.陣列建立後就不能改變大小了。
c.陣列中的索引或下標是從0開始的。
注意:編譯器不會檢查到你使用了無效下標,但是執行時,程式可能會發生終止。
2.定義陣列變數
<型別>[]<名字>= new <型別>[元素個數]
例如:int[] num=new int[50];
注:元素個數必須給出,也可以是一個確定值的變數;
例1:
輸入一串數字,輸出其大於平均值的數值以及這些數的和。
思路:
1.要將輸入的數字先儲存起來。2.算出平均值後,將每個數值與其比較,若大於平均值則輸出。主要考察陣列的使用。
package spoc; import java.util.Scanner; public class Array { public static void main(String[] args) { Scanner in=new Scanner(System.in); double sum=0; int j=0; System.out.print("要輸入的個數:"); int arr=in.nextInt(); if(arr>0) { int [] num=new int [arr];//建立陣列 //int x=in.nextInt(); int[]sor={11,22,44,66,88}; while( j<arr) { int x=in.nextInt(); num[j++]=x; sum+=x; } double av=sum/arr; System.out.print("大於平均數的值有: "); for(int i=0;i<num.length;i++) { if(num[i]>av) System.out.print(num[i]+" "); } System.out.print("\n 平均值為:"+av+" "); System.out.print("\n和為:"+sum+" "); } else System.out.println("輸入錯誤"); return ; } }
輸出結果:
例2:投票統計
package spoc; import java.util.Scanner; public class vote { public static void main(String[] args) { Scanner in=new Scanner(System.in); int []num=new int [10]; int i=in.nextInt(); while(i>0&&i<9) { num[i]++; i=in.nextInt(); } //另一種方式 // while(i>0&&i<9) // { // switch(i) // { // case 1:num[1]++;break; // case 2:num[2]++;break; // case 3:num[3]++;break; // case 4:num[4]++;break; // case 5:num[5]++;break; // case 6:num[6]++;break; // case 7:num[7]++;break; // case 8:num[8]++;break; // case 9:num[9]++;break; // default:break; // } // // i=in.nextInt(); // } for(int j=1;j<num.length;j++) {if(num[j]!=0) System.out.println("第"+j+"位票數為:"+num[j]); } System.out.println("未輸出者票數為0"); } }
輸出結果:
例3:遍歷陣列
package spoc;
import java.util.Scanner;
public class through_arryy {
public static void main(String[] args) {
// 遍歷陣列
int [] num={1,2,5,16,5,12,13};
Scanner in =new Scanner(System.in);
int x=in.nextInt();
int flag=0;
boolean found=false;
for(int i=0;i<num.length;i++)
{
if(x==num[i])
{ flag=1;
System.out.println("num["+i+"]的值為"+num[i]);
}
}
// for(int k:num)
// { if(k==x)
// {
// found=true;//for-each語句不能修改陣列值,只能輸出
// }
// }
if(flag==0)
System.out.println("未查詢到相同的值");
}
}
輸出結果:
例4:高效率輸出素數:
package spoc;
public class imp_prime1 {
public static void main(String[] args) {
int[] primes=new int[50];
primes[0]=2;
int cut=1;//素數表的下標
MAIN_LOOP:
for (int x=3;cut<primes.length;x++)//x為數值
{
for(int i=0;i<cut;i++)//表未滿則迴圈
{
if(x%primes[i]==0)
continue MAIN_LOOP;
}
primes[cut++]=x;
}
for(int k:primes)
{
System.out.print(k+" ");
}
System.out.println();
}
}
結果輸出:
思路:
a.建立一個存放素數的陣列primes,把2放入primes[0];
b.設定一個變數x,讓數值從3開始自加,加到素數數值滿為止;
3.用當前x的值依次除以素數表當前存在的元素,若相除為0則x不為素數,則跳到最開頭位置,讓x++;
若x為素數,則執行primes[cut++]=x;將當前元素放入素數表,將陣列下標加1,為放入下一位素數做準備。放入後x加一進行下一輪迴圈。
3.二維陣列
例1:
題目描述:假如1獲勝,代表有一行同為1或者一列,對角線,反對角線同為1,滿足四種的任一種即獲勝;
若出現0,1都滿足條件了,則根據程式,看哪個先滿足則哪方獲勝。
實現程式碼:
package spoc;
import java.util.Scanner;
public class tic_tac_toe {
public static void main(String[] args) {
// 二維陣列
// int [][]g=new int[3][5];
// int [][]g={
// {1,2,3,4,5},//裡面的{}為行,行與行之間用逗號分開
// {2,3,4,5}//即使有4個元素,但也為四列
// };//如果省略補零
Scanner in=new Scanner(System.in);
int SIZE=3;
boolean result1=false;
int [][]a=new int [SIZE][SIZE];
int numsO=0;
int numsX=0;
for(int i=0;i<a.length;i++) //表示矩陣有多少行
{
for(int j=0;j<a[i].length;j++) //表示矩陣第i行有多少列
{
a[i][j]=in.nextInt();
}
}
for(int i=0;i<a.length;i++)//輸出矩陣
{
for(int j=0;j<a[i].length;j++)
{
System.out.print(a[i][j]+" ");
}
System.out.println();
}
//檢查行
for (int i=0;i<SIZE;i++)
{
numsO=0;
numsX=0;
for (int j=0;j<SIZE;j++)
{
if(a[i][j]==1)
numsX++;
else
numsO++;
}
if(numsO==SIZE||numsX==SIZE)
{
result1=true;
}
}
//檢查列
if(!result1)
{
for (int i=0;i<SIZE;i++)
{
numsO=0;
numsX=0;
for (int j=0;j<SIZE;j++)
{
if(a[j][i]==1)
numsX++;
else
numsO++;
}
if(numsO==SIZE||numsX==SIZE)
{
result1=true;
}
}
}
//判斷對角
if(!result1)
{
numsO=0;
numsX=0;
for(int i=0;i<SIZE;i++)
{
if(a[i][i]==1)
numsX++;
else
numsO++;
if(numsO==SIZE||numsX==SIZE)
{
result1=true;
}
}
}
//判斷反對角
if(!result1)
{numsO=0;
numsX=0;
for (int i=0;i<SIZE;i++)
{
numsO=0;
numsX=0;
if(a[i][SIZE-1-i]==1)
numsX++;
else
numsO++;
}
if(numsO==SIZE||numsX==SIZE)
{
result1=true;
}
}
if(result1)
{
if(numsO==SIZE)
System.out.println("O win");
else
System.out.println("X win" );
}
else
System.out.println("無人獲勝");
}
}
執行結果:
思路:
1.設定三個變數 numsO代表0的個數; numsX為1的個數;布林值result1,代表是否滿足條件;
2.判斷行,一行是否全為1或0,若出現某列成立則將result1變數賦為真,則不再進行以下判斷
3.若未滿足條件時,繼續判斷行。行與列相似都需要兩層迴圈,若滿足,則不再判斷
4.若未滿足條件,再依次判斷對角線,反對角線。這兩個只需一層迴圈即可判斷。