本文实例讲述了java实现的海盗算法。分享给大家供大家参考,具体如下:
前面介绍了《C#实现的海盗分金算法》,这里再给出一个Java优化版的算法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package unit4; public class Pirate{ private String name; private int [] schemes; private int index; public Pirate( int t, int i) { name= "unknow" ; index=i; schemes=makeSchemes(t); } public String getName() { return name; } public void setName(String name) { this .name = name; } public int getIndex(){ return index;} public int [] getSchemes() { return schemes;} public int handvote( int table[]) { return myhandvote(table,index); } private int myhandvote( int []t, int i) { if (t[i]== 0 ) return 0 ; if (i== 1 ) return 0 ; return 1 ; } public int [] makeSchemes( int t) { int vote= 0 ; schemes = new int [t-index]; do { for ( int i= 0 ;i<schemes.length;i++){ schemes[i]=(i+ 1 )% 2 ; } for ( int i= 0 ;i<schemes.length;i++){ vote=vote+myhandvote(schemes,i); } } while (!( 2 *vote>t/ 2 )); return schemes; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package unit4; public class Judger { int [] allot; Pirate[] pirates; public Judger(Pirate []pirates, int []a) { this .pirates=pirates; allot=a; } public int [] getAllot() { return allot; } public void setAllot( int [] allot) { this .allot = allot; } public Pirate[] getPirates() { return pirates; } public void setPirates(Pirate[] pirates) { this .pirates = pirates; } public boolean evaluate(){ int vote= 0 ; for ( int i= 0 ;i<pirates.length;i++){ vote+=pirates[i].handvote(allot); } if ( 2 *vote>=pirates.length) return true ; else return false ; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package unit4; public class MaxInterest { public static void main(String[] args) { int piratecounts= 5 ; Pirate[]pirates= new Pirate[piratecounts]; for ( int i= 0 ;i<piratecounts;i++){ pirates[i]= new Pirate(piratecounts,i); pirates[i].setName( "name" +i); } int []table =pirates[ 0 ].getSchemes(); Judger ajudge= new Judger(pirates,table); if (ajudge.evaluate()){ int []scheme=ajudge.getAllot(); for ( int i= 0 ;i<scheme.length;i++) System.out.println( " " +scheme[i]); } } } |
希望本文所述对大家java程序设计有所帮助。