1. 程式人生 > >陣列定義及例題——java(輸大於平均值;投票統計;遍歷陣列;高效率素數;tic—tac-toe遊戲)

陣列定義及例題——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.若未滿足條件,再依次判斷對角線,反對角線。這兩個只需一層迴圈即可判斷。