学习Java第四天(收获)
一.感想
今天是第四天,很有纪念意义的第四天。
这一天是我学习Java的第四天,由最初的一无所知,挫败,到现在可以用Java编码解决一些小小的问题,尽管有时候一道小小的题,我从开始写,写完,改错最终到运行出来,需要一两个小时甚至更多,但是这个解决问题的过程中,那种成就感,充实感,是其他任何事情所不能带给我的。与此同时,我发现我写代码的速度和成功率也在逐渐提升,我相信,终有一天我可以战胜你的!
这一天是我坚持每天不玩手机,不追剧,每天上课认真听讲,下课认真复习,坚持写代码,坚持背四级单词的第四天,我喜欢现在的状态,喜欢现在生活方式,也喜欢现在心中有目标,每天努力奋斗,心无旁骛的我。希望我可以一直一直保持下去,我也相信我一定会保持下去的!!!
以下呢是我今天写的代码哦,欢迎大家批评指教!
二,今天的成就
1.寻找一个数组中某一个元素
<1>.
public class find{
public static void main(String[] args){
int[] a={1,2,3,4,5,6,7,8,9,9};
int m=10;
System.out.println(indexof(a,m));
}
public static int indexof(int[] a,int v){
int i=0;
int ret=-1;
while(i<a.length){
if(v==a[i])
{ret=i; break;}
else
i++;
}
return ret;
}
}
结果:
<2>简化版:
public class find{
public static void main(String[] args){
int[] a={1,2,3,4,5,6,7,8,9,9};
int m=4;
System.out.println(indexof(a,m));
}
public static int indexof(int[] a,int v){
for (int i = 0; i < a.length; i++) {
if (a[i] == v) {
return i;
}
}
return -1;
}
}
结果:
<3>二分查找法
public class find{
public static void main(String[] args){
int[] a={1,2,3,4,5,6,7,8,9,10};
int key=6;
int left=0;
int right=a.length-1;
System.out.println(indexof(a,key,left,right));
}
public static int indexof(int[] a,int key ,int m,int n){
int mid=0;
while(m<=n){
mid=(m+n)/2;
if(a[mid]<key){
m=mid;
}
else if(a[mid]>key)
{
n=mid;
}
else
break;
}
if(m<=n)
{System.out.println("找到了");
return mid;
}
else
return -1;
}
}
结果:
2. 利用公式
* e = 1/0! + 1/1! + 1/2! + 1/3! + 1/4! + …
* 计算自然对数的底 e
* @param n 计算多少项
* @return
/
/*
<1>
public class find{
public static void main(String[] args) {
int n=2;
System.out.println(Sum(n));
}
public static double Sum(int m){
double s=0.0;
for(int i=0;i<=m;i++){
s+=(1.0)/(jiechen(i));
}
System.out.println(s);
return s;
}
public static int jiechen(int k){
int ret=1;
if(k>1){
ret= k*jiechen(k-1);
}
return ret;
}
}
结果:
3. 利用公式
* Pi / 4 = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 - …
* 计算 pi 的值
* @param n 一共计算多少项
* @return*
<1>
public class find{
public static void main(String[] args) {
int n=10000;
System.out.println(Sum(n)*4);
}
public static double Sum(int m){
double s=0.0;
for(int i=0;i<m;i++){
if(i%2==0)
s+=(1.0)/((2*i)+1);
if(i%2!=0)
s-=(1.0)/((2*i)+1);
}
System.out.println(s);
return s;
}
}
<2>
public class find{
public static void main(String[] args) {
int n=10000;
System.out.println(calcPi(n));
}
public static double calcPi(int n) {
double pi4 = 0;
for (int i = 0; i < n; i++) {
int fenmu = 2 * i + 1;
double item = 1.0 / fenmu;
if (i % 2 == 0) {
pi4 += item;
} else {
pi4 -= item;
}
}
return pi4 * 4;
}
}
结果:
4.
* 10 进制转 16 进制,计算公式如下例
* 1958 转 16 进制
* 1958 % 16 == 6 1958 / 16 == 122
* 122 % 16 == 10 也就是 A 122 / 16 == 7
* 7 < 16
* 1958 的 16 进制 为 7A6
* @param n
* @return*
public class find{
public static void main(String[] args){
int n=1958;
System.out.println(decToHex(n));
}
public static String reverse(String s) {
int length = s.length();
String r = "";
for (int i = length - 1; i >= 0; i--) {
r += s.charAt(i);
}
return r;
}
public static String decToHex(int n) {
String r = "";
while (n > 16) {
int yushu = n % 16;
int shang = n / 16;
if (yushu > 9) {
char c = (char)((yushu - 10) + 'A');
r += c;
} else {
r += yushu;
}
n = shang;
}
if (n > 9) {
char c = (char)((n - 10) + 'A');
r += c;
} else {
r += n;
}
return reverse(r);
}
}
结果: