目录
2024年1月24日,在接下来的几篇博客我会记录这10天学习的成果和学习心得,把它分享出来是为了激励我自己加快把JAVA学完备战蓝桥杯,同时也希望大家看到我的博客后能一起学习一起进步,正所谓“与优秀的人一起学习,才能变得更出色。”
特别说明:因为我是学完c语言再开始JAVA故我会重点写与c不同的地方,或者c没有的。
下面就开始我的第一天啦😎😎😎
JAVA的基本程序设计结构
必不可少的hello world!
由于是纯JAVA小白下面我对hello world解释一下,public是公共的意思,class是类,Test2是我的程序名,下面static是静态void是空,这里推荐大家先背下来吧,就好像1+1=2,就是我们人规定的想把它记下来随着后面的深入学习会明白的。
public class Test2
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
运行结果如下:
和c一样有(1)//(2)/*? ?
JAVA特有(3)/**? ? ?*/
(1)Ctrl+/? 注释本行代码
(2)Ctrl+shift+/ 注释一段带代码
复原只需再按一次即可。
第三主要用于开头,相信有看过JAVA代码的朋友都不陌生。
JAVA是一种强类型语言。它的每一个变量声明一种类型(每种类型明确字节个数,这也就是为什么JAVA的移植性好),一共有8中基本类型,其中有4中整型,2中浮点型,1中字符char(表示Unicode编码的代码单元,这个编码就好似c的ASCII)还有boolean类型。
int? ? ? ? ?4字节
short? ? ?2字节
long? ? ? 8字节
byte? ? ? 1字节
注意JAVA没有任何无符号形式的int,long,short或byte类型
float? ? ? 4字节
double??8字节
可以用16进制表示浮点数例如,0.125 = 2^(-3)可以表示为0x1.0p-3。在16进制表示法中,用p表示指数,位数用16进制,指数用十进制。指数的基数是2,而不是10.
注意就这个了。
最特殊的是/uxxxx后面4个16进制数,特别注意即使是在注释中/u后面没有跟4个16进制数也会报错。一定要小心哦。( $ _ $ )
和c语言里面的bool差不多,唯一区别就是在c中0可以代表false在JAVA中这是不可以的。
在JAVA中必须使用final定义常量。例如
目前用的不多,估计蓝桥杯用不上故跳过。
在字符串之前是有个运算符由于我觉得和c差不多故我就不在描述。
首先明确一点JAVA是有字符串类型的叫String,前面的S要大写,使用方法如下:
下面的输出大家可以先跳过,后面我会解释。
JAVA比c简便的地方
JAVA只需在目标字符串后面加上.subString(x,y);即可,x是起始地点,y是终点。
可以用+进行字符串拼接,可以在Stirng变量上拼接也可以直接在输出方法哪拼接(JAVA叫方法,c叫函数)如:
在JAVA中字符串是不可变字符串,这样有一个优点:编译器可以让字符串共享。
s.equals(t)来判断,如果字符串s与字符串t相等返回true,否则返回false,s和t既可以是字符串变量也可以是字符串字面量。如:
如果不区分大小写的化用equalsIgnoreCase方法,用法如上一样的。
int comparreTo(String other)
按照字典顺序,如果字符串位于other之前,返回一个负数;如果字符串位于other之后返回一个正数,如果两个字符串相同返回0.
(5)构建字符串
由于每次拼接字符串都会构成一个新的String对象这样时间和空间复杂度都较高,故可以用StringBuilder类。
先构造一个空的字符串构建器:
new StringBuilder();
每次添加一小部分内容时用append方法。
用法如下,最后要用toString结束。
前面可以看到输出到控制台窗口是很简单的,只要调用System.out.println即可,但输入就没那么简单,首先需要构造一个与标准输入流System.in关联的Scanner对象。
Sanner in = new Scanner(System.in);
这个在后面几天会学到先记着。
由于Scanner类定义在java.util包中,当使用的类不是定义在基本java.lang包中时,一定要用import指令导入相应的包。
相应的代码如下:
红色是前摇,蓝色是用法,我这么说很清楚吧😎😎😎
String nextLine | 读取输入的下一行内容 |
String next | 读取输入的下一个单词(以空格为分隔符) |
int nextInt | 读取下一个表示整数 |
double nextDouble | 读取下一个表示浮点数 |
和c一样JAVA保留了printf(格式化输出)。
调用方法:System.out.printf("%f",x);
与c不同的是可以指定控制格式化输出外观的各种标志。
例如:
+ | 打印正数和负数的符号 | +3333.33 |
空格 | 在正数之前添加空格 | | 333.33| |
0 | 在数字前面补0 | 003333.33 |
- | 左对齐 | | 3333.33 | |
( | 将负数括在括号里 | (3333.33) |
, | 添加分组分隔符 | 3,333.33 |
#(对于f) | 包含小数点 | 3.33 |
#(对于x) | 添加前缀0x或0 | 0xcafe |
$ | 指定要格式化的参数索引 | 1599F |
< | 格式化前面说明的数值 | 1599F |
和c/c++不同的是不能在嵌套的两个块中声明同名的变量
因为和c基本一样我就给出代码大家自己理解一下:
import java.util.*;
public class Test2
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("How much money do you need to retire? ");
double goal = in.nextDouble();
System.out.print("How much money will you contribute every year? ");
double payment = in.nextDouble();
System.out.print("Interest rate in %:" );
double interestRate = in.nextDouble();
double balance=0;
int years = 0;
while(balance<goal)
{
balance+=payment;
double interest = balance*interestRate/100;
balance+=interest;
years++;
}
System.out.println("You can retire in "+years+" years.");
}
}
很高兴的是JAVA有自带的高精度运算,当然作者并不是很开心因为刚学过呢😢😢😢,可以用JAVA.math包中两个类BigInteger和BigDecimal,BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度大的浮点数运算。
在用BigInteger和BigDecimal之前要使用静态的valueOf方法将普通的数值转换成大数:
BigInteger? a = BigInteger.valueOf(100);构建100的大数。
遗憾的是,不能用人们熟悉的算术运算符(如+和*)处理大数,而需使用大数类中的add和multiply方法如
BigInteger c = a.add(b);
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));
实例如下,计算彩票中奖的概率:
前面要引用一个math包。
import java.math.*;
import java.util.*;
public class Test2
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("How many numbers do you need to draw? ");
int k = in.nextInt();
System.out.print("What is the highest number you can draw? ");
int n =in.nextInt();
BigInteger lotteryOdds = BigInteger.valueOf(1);
for(int i =1;i<=k;i++)
{
lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n-i+1)).divide(BigInteger.valueOf(i));
}
System.out.println("Your odds are 1 in"+lotteryOdds+". Good luck!");
}
}
BigInteger add(BigInteger other) | 返回这个大整数和另一个大整数 other的和 |
?BigInteger subtract (BigInteger other) | 返回这个大整数和另一个大整数 other的差 |
?BigInteger multiply (BigInteger other) | 返回这个大整数和另一个大整数 other的积 |
BigInteger divide (BigInteger other) | 返回这个大整数和另一个大整数 other的商 |
BigInteger mod (BigInteger other) | 返回这个大整数和另一个大整数 other的余数 |
BigDecimal add(BigDecimal other) | 返回这个大实数与 other的和 |
BigDecimal subtract (BigDecimal other) | 返回这个大实数与 other的差 |
BigDecimal multiply (BigDecimal other) | 返回这个大实数与 other的积 |
BigDecimal divide (BigDecimal other) | 返回这个大实数与 other的商 |
和c不同的是JAVA的数组会自动初始化,且创建的常用格式如下:
int[] a = new int[100];
必须先创建再使用。
在Arrays类提供了sort方法采用的快速排序。
来感受一下吧!
用random生成随机数这个随机数在0~1直接乘于n到0~n-1之间,将一个随机数放到result数组后把number【i】覆盖的,因为用过的不能再用了。
最后用for each循环打印,该循环的好处是不用判断条件,直接全部打印。
import java.util.*;
public class Test2
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("How many numbers do you need te draw? ");
int k = in.nextInt();
System.out.print("What is the highest number you can draw? ");
int n = in.nextInt();
int[]numbers = new int[n];
for(int i =0;i<numbers.length;i++)
numbers[i] = i+1;
int[]result = new int[k];
for(int i =0;i<result.length;i++)
{
int r = (int)(Math.random()*n);
result[i] = numbers[r];
numbers[r] = numbers[n-1];
n--;
}
Arrays.sort(result);
System.out.println("Bet the following combination.it'll make you rich!");
for(int r:result) System.out.println(r);
}
}
运行结果如下:
其实写博客不仅仅是为了教大家,同时这也有利于我巩固自己的知识点,和一个学习的总结,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进,如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注,这可以激励我写出更加优秀的文章。