@Java基础学习
1、f(n)=1+1/2+1/3+…+1/n
代码如下(示例):
2f小数点后两位(四舍五入)
f(n) = 1-1/2+1/3-1/4+…+1/n
代码如下(示例):
public class Hello {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Double sum = 0.0;
int sign = 1;
for(int i = 1;i <= n; i++)
// 或是 for(int i = 1;i <= n; i++,sign = -sign;)
{
sum += sign*1.0/i; //i++;sign = -sign;
sign = -sign;
// if(i % 2 == 0)
// {
// sum += 1.0/i;
// }
// else
// {
// sum -= 1.0/i;
// }
}
System.out.println(sum);
System.out.printf("%.2f",sum);
}
2.数组
1.用户输入的数字的平均数,并输出所有大于平均数的数?
代码如下(示例):
Scanner in = new Scanner(System.in);
int x ;
double sum=0;
int[] numbers = new int[100]; //定义数组
int cnt = 0;
x = in.nextInt();
while( x != -1)
{
numbers [cnt] = x; //对数组赋值
sum += x;
cnt++;
x = in.nextInt();
}
double average = sum/cnt;
System.out.println("average:"+average);
for(int i=0 ; i<=cnt ; i++)
{
if( numbers[i]>average )
{
System.out.print(numbers[i]+" ");
}
}
结果:
2.数组是一种容器(放东西的东西),特点是:其中所有的元素具有相同的数据类型;一旦创建,不能改变大小。
定义数组变量:
<类型> [ ] <名字> = new <类型> [元素个数]
int [ ] grades = new int [100] ; // gardes[ ];
● 元素个数必须是整数
● 元素个数必须给出
● 元素个数可以是变量
int [ ] a = new int [10] // a[0]开始到a[9]
动态数组
代码如下(示例):
Scanner in = new Scanner(System.in);
double sum=0;
int cnt = in.nextInt();
if(cnt > 0)
{
int[] numbers = new int[cnt]; //定义动态数组
for(int i = 0; iaverage )
{
System.out.print(numbers[i]+" ");
}
}
}
for(int i=0 ; i
length:每个数组有一个内部成员length,会告诉你它的元素的数量 遍历数组时: ```c for(int i=0 ; i
数组变量赋值
● 数组变量是数组的管理者而非数组本身
● 数组必须创建出来然后交给数组变量来管理
● 数组变量之间的赋值是管理权限的赋予
● 数组变量之间的比较是判断是否管理同一个数组
int[] a1 = {1,2,3,4,5};
int[] a2 = a1;
for( int i =0 ;i
结果:
int[] a = {1,2,3,4,5};
int[] b = {1,2,3,4,5};
System.out.println(a==b);//a管理a数组,b管理b数组,本质不一样。
false
复制数组
●必须遍历源数组将每个元素逐一拷贝给目的数组
代码如下(示例):
int[] a = {1,2,3,4,5};
int[] b = new int[a.length];
for(int i =0; i
1 2 3 4 5 false
投票统计
代码如下(示例):
Scanner in = new Scanner(System.in);
int x;
int[] numbers = new int[10];
for(int i =0 ;i=0 && x<=9)
{
numbers[x] ++ ;
}
x = in.nextInt();
}
for(int i =0 ;i
搜索
●在一组给定的数据中,如何找出某个数据是否存在?
代码如下(示例):
Scanner in = new Scanner(System.in);
int[] data = {3,2,5,7,214,53,647,43};
int x = in.nextInt();
int loc = -1;
for(int i =0; i-1)
{
System.out.println(x+"是第"+(loc+1)+"个");
}
214
214是第5个
遍历数组
for(int i =0; i
●通常都是使用for循环,让循环变量i从0到<数组的length,这样循环体内最大的i正好是数组最大的有效下标
●常见错误是:
●循环结束条件是<=数组长度,或;
●离开循环后,继续用i的值来做数组元素的下标!
for-each
for(<类型><变量>:<数组>){
}
代码如下(示例):
Scanner in = new Scanner(System.in);
int[] data = {3,2,5,7,214,53,647,43};
int x = in.nextInt();
boolean found = false;
for( int k : data) //遍历data数组 k=3,k=2…
{
if( x==k )
{
found = true;
break;
}
}
if(found)
{
System.out.println(x+"在其中");
}
else
{
System.out.println(x+"不在其中");
}
数组的例子:素数
判断是否能被已知的且 ●构造前50个素数的表
代码如下(示例):
int[] primes = new int[50];
primes[0] = 2;
int cnt = 1; // ①primes数组当前存了一个数据,②下一次数组下标为1
MAIN_LOOP:
for( int x = 3; cnt < 50; x++) //从3开始依次增加 检查是否为素数
{
for( int i = 0; i
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229
构造素数表
●欲构造n以内的素数表
1.令x为2
2.将2x、3x、4x直至ax 3.令x为下一个没有被标记为非素数的数,重复2;直到所有的数都已经尝试完毕
代码如下(示例):
boolean[] isPrime = new boolean[100];
for( int i=2; i
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
二维数组
● int[][] a = new int[3][5]
●通常理解为a是一个3行5列的矩阵
二位数组的遍历
for( i=0; i<3; i++)
{
for( j=0; j<5; j++)
{
a[i][j] = i*j
}
}
● a[i][j]是一个int
● 表示第i行第j列上的单元
● a[i,j]并不存在
二位数组的初始化
int[][] a = {
{1,2,3,4},
{1,2,3},
};
● 编译器来数数
● 每行一个{},逗号分隔
● 最后的逗号可以存在,有古老的传统
● 如果省略,表示补零
tic-tac-toe游戏
● 读入一个3×3的矩阵,矩阵中的数字为1表示该位置上有一个X,为0表示为O
●程序判断这个矩阵中是否有获胜的一方,输出表示获胜一方的字符X或O,或输出无人获胜
代码如下(示例):
Scanner in = new Scanner(System.in);
final int SIZE = 3;
int[][] board = new int[SIZE][SIZE];
boolean gotResult = false;
int numOfx = 0;
int numOfO = 0;
//读入矩阵
for( int i=0; i
1 1 1 0 0 0 0 0 0
第1行赢



