import java.lang.Math.*;
public class Jacobi
{
public static void main(String[] args)
{
final int M=3;
double a[M][M]={ {10,-1,-2},
{-1,10,-2},
{-1,-1, 5} };
double b[M] = { 7.2, 8.3, 4.2 };
double x[M] = {0,0,0},y[M];
double s, max, eps = 0.000000001;
int k, i, j, N = 100;
k = 1;
while( k<N )
{
for ( i=0; i<M ; i++ )
{ s = 0;
for ( j=0; j<M; j++ )
if( j-I ) s += a[i][j] * x[j];
y[i] = ( b[i]-s) / a[i][i];
}
max = 0;
for ( i=0; i<M; i++ )
if( max < Math.abs( x[i]-y[i] ) ) max = Math.abs( x[i] - y[i] );
if ( max < eps ) break;
System.out.println( "k= "+ k );
for( i=0; i<M; i++ )
System.out.println( "y[i]= "+ y[i] );
System.out.println( "i= "+ i );
k++;
for( i=0; i<M; i++ ) x[i] = y[i];
}
if(k == N) { System.out.println( "ERROR!" ); return; }
printf( "k= "+ k );
for ( i=0; i < M; i++ ) System.out.println( "y[i]= "+ y[ i ] );
System.out.println( "i= "+ i );
}
}错误提示:
---------- javac ----------
Jacobi.java:7: 需要 ']'
double a[M][M]={ {10,-1,-2},
^
Jacobi.java:10: 需要 ']'
double b[M] = { 7.2, 8.3, 4.2 };
^
Jacobi.java:11: 需要 ']'
double x[M] = {0,0,0},y[M];
^
3 错误输出完成 (耗时: 0 秒) - 正常终止
public class Jacobi
{
public static void main(String[] args)
{
final int M=3;
double a[M][M]={ {10,-1,-2},
{-1,10,-2},
{-1,-1, 5} };
double b[M] = { 7.2, 8.3, 4.2 };
double x[M] = {0,0,0},y[M];
double s, max, eps = 0.000000001;
int k, i, j, N = 100;
k = 1;
while( k<N )
{
for ( i=0; i<M ; i++ )
{ s = 0;
for ( j=0; j<M; j++ )
if( j-I ) s += a[i][j] * x[j];
y[i] = ( b[i]-s) / a[i][i];
}
max = 0;
for ( i=0; i<M; i++ )
if( max < Math.abs( x[i]-y[i] ) ) max = Math.abs( x[i] - y[i] );
if ( max < eps ) break;
System.out.println( "k= "+ k );
for( i=0; i<M; i++ )
System.out.println( "y[i]= "+ y[i] );
System.out.println( "i= "+ i );
k++;
for( i=0; i<M; i++ ) x[i] = y[i];
}
if(k == N) { System.out.println( "ERROR!" ); return; }
printf( "k= "+ k );
for ( i=0; i < M; i++ ) System.out.println( "y[i]= "+ y[ i ] );
System.out.println( "i= "+ i );
}
}错误提示:
---------- javac ----------
Jacobi.java:7: 需要 ']'
double a[M][M]={ {10,-1,-2},
^
Jacobi.java:10: 需要 ']'
double b[M] = { 7.2, 8.3, 4.2 };
^
Jacobi.java:11: 需要 ']'
double x[M] = {0,0,0},y[M];
^
3 错误输出完成 (耗时: 0 秒) - 正常终止
double a[][]={ {10,-1,-2},{-1,10,-2},{-1,-1, 5} };
double b[] = { 7.2, 8.3, 4.2 };
double x[] = {0,0,0},y[];
y=new double[M];
关于数组定义的语法,看下面连接
http://www.trainlinux.com/p/2002-02-22/4563.html
數組定義..
public static void main(String args[]){
int i;
int a[]=newint[5];
for(i=0;i<5;i++)
a[i]=i;
for(i=a.length-1;i>=0;i--)
System.out.println("a["+i+"]="+a[i]);
}
} 运行结果如下: C:\>java ArrayTest a[4]=4
a[3]=3
a[2]=2
a[1]=1
a[0]=0 该程序对数组中的每个元素赋值,然后按逆序输出。 三、一维数组的初始化 对数组元素可以按照上述的例子进行赋值。也可以在定义数组的同时进行初始化。 例如: int a[]={1,2,3,4,5}; 用逗号(,)分隔数组的各个元素,系统自动为数组分配一定空间。 与C中不同,这时Java不要求数组为静态(static)。 四、一维数组程序举例: 例Fibonacci数列 Fibonacci数列的定义为: F1=F2=1,Fn=Fn-1+Fn-2(n>=3) public classFibonacci{
public static void main(String args[]){
int i;
int f[]=new int[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-1]+f[i-2];
for(i=1;i<=10;i++)
System.out.println("F["+i+"]="+f[i-1]);
}
} 运行结果为: C:\>java Fibonacci F[1]=1
F[2]=1
F[3]=2
F[4]=3
F[5]=5
F[6]=8
F[7]=13
F[8]=21
F[9]=34
F[10]=55 例冒泡法排序(从小到大) 冒泡法排序对相邻的两个元素进行比较,并把小的元素交到前面。 public class BubbleSort{
public static void main(String args[]){
int i,j;
int intArray[]={30,1,-9,70,25};
int l=intArray.length;
for(i=0;i<l-1;i++)
for(j=i+1;j<l;j++)
if(intArray[i]>intArray[j]){
int t=intArray[i];
intArray[i]=intArray[j];
intArray[j]=t;
}
for(i=0;i<l;i++)
System.out.println(intArray[i]+"");
}
} 运行结果为: C:\>java BubbleSort
-9
1
25
30
70 多维数组 与C、C++一样,Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。下面我们主要以二维数为例来进行说明,高维的情况是类似的。 一、二维数组的定义 二维数组的定义方式为: type arrayName[][]; 例如: int intArray[][]; 与一维数组一样,这时对数组元素也没有分配内存空间,同要使用运算符new来分配内存,然后才可以访问每个元素。 对高维数组来说,分配内存空间有下面几种方法: 1直接为每一维分配空间,如: int a[][]=new int[2][3]; 2从最高维开始,分别为每一维分配空间,如: int a[][]=new int[2][];
a[0]=new int[3];
a[1]=new int[3]; 完成1中相同的功能。这一点与C、C++是不同的,在C、C++中必须一次指明每一维的长度。 二、二维数组元素的引用 对二维数组中每个元素,引用方式为:arrayName[index1][index2] 其中index1、index2为下标,可为整型常数或表达式,如a[2][3]等,同样,每一维的下标都从0开始。 三、二维数组的初始化 有两种方式: 1直接对每个元素进行赋值。 2在定义数组的同时进行初始化。 如:int a[][]={{2,3},{1,5},{3,4}}; 定义了一个3×2的数组,并对每个元素赋值。 四、二维数组举例: 矩阵相乘 两个矩阵Am×n、Bn×l相乘得到Cm×l,每个元素Cij=aik*bk (i=1..m,n=1..n) public class MatrixMultiply{
public static void main(String args[]){
int i,j,k;
int a[][]=new int[2][3];
int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
int c[][]=new int[2][4];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=(i+1)*(j+2);
for(i=0;i<2;i++){
for(j=0;j<4;j++){
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
System.out.println("\n***MatrixA***");
for(i=0;i<2;i++){
for(j=0;j<3;j++)
System.out.print(a[i][j]+"");
System.out.println();
}
System.out.println("\n***MatrixB***");
for(i=0;i<3;i++){
for(j=0;j<4;j++)
System.out.print(b[i][j]+"");
System.out.println();
}
System.out.println("\n***MatrixC***");
for(i=0;i<2;i++){
for(j=0;j<4;j++)
System.out.print(c[i][j]+"");
System.out.println();
}
}
} 其结果为: C:\>java MatrixMultiply for(j=0;j<4;j++)
System.out.print(c[i][j]+"");
System.out.println();
}
}
} 其结果为: C:\>java MatrixMultiply ***MatrixA***
2 3 4
4 6 8
***MatrixB***
1 5 2 8
5 9 10 -3
2 7 -5 -18
***MatrixC***
25 65 14 -65
50 130 28 -130
如果你学过线性代数,应该可以比较好地理解多维数组。
多维数组和矩阵结合紧密。 a[i][j]就是第i-1行的第j-1列的元素,因为下标是从0开始的。
比如:
一个数组:1 2 3
4 5 6
a[0][0]=1 a[0][1]=2 a[0][2]=3
a[1][0]=3 a[1][1]=5 a[1][2]=6
推荐给LZ几本书:
1.Thinking in Java
2.Java 2 核心技术
3.Java2实用教程
4.面向对象程序设计与java语言 参考资料:JAVA概述