Java学习的第一天:
Java入门到精通
学习内容:
Java使用编程快捷键 Java入门–输入输出、变量、浮点数、优先级、强制类型转换、布尔类型 逻辑,if,while,switch句子、循环、数组(一维、二维)
内容说明笔记:
Hello!我是C风,专注于算法和算法Java学习,我有两个专栏,Java专栏专门记录我的Java从零开始学习的过程。今天,我正式开始发博客打卡Java在学习之前,我基础C,现在转战Java,从最基本的开始,用博客记录我的学习笔记和学习经验。
首先是我们的Java快捷键的基本编辑:Alt / 联想模式可以打开,eclipse里面也可以用Ctrl /添加或删除注释Ctrl 方向键选择行数。
Java基础-- 读入数据
Java读入数据不同于C,需要先输入Scanner in = new Scanner(System.in);输入之后eclipse一句话会自动添加import java.util.Scanner 然后我们可以输入数据; Java基本输出语句是System.out.print()这里还有println,还有printf,这三者的区别在于print输出后,光标在本行,println光标在下一行,也就是自己加了一个\n; 让我们演示一下代码:
package hello; import java.util.Scanner; public class Hello {
public static void main(String[] args) {
// TODO Auto-generated method stub System .out.println("你好!");///这里是字符串。de // Scanner in = new Scanner(System .in ); // System.out.println("Elco:" in.nextLine()); // 可连接两个字符串 System .out .println("100-27 =" (100-27));///括号将计算。如果没有括号,则会出错。加号只连接两个字符串 } }
这是一个简单的输出程序,在这里 它是连接字符串的功能。例如,如果将最后一行的减法放在括号前面,则无需添加括号。如果放在后面,则应添加括号,否则会自动报错。
Java入门–变量
说到编程,我们就离不开基本量的表示,不可能所有的数据都是常量,既然有常量就会有变量,在定义变量时我们需要注意命名规则:变量的命名只能由数字,字母以及下划线组成,且第一个位置不能时数字,还有就是不能用到Java命名变量本身的名称就像class这里再提一点,就是我们类名的首字母需要大写。
根据变量可以替换上述减法并使用in.next 就像这里的数据是一个整形,然后使用它in.nextInt() 记住在这里或大写;根据我自己的理解scanner in = 这一行可能是输入的前提语句,后面的in.nextLine()相当于C。scanf 是输入的地方,因此,我们需要定义变量来实现它
System .out .println("100-" in.nextInt() "=" (100-in.nextInt()));
这样子的话,我们就要输入两次,在in.nextInt()的位置都是需要输入的。这时我们就要使用C语言里面的变量来解决多次输入的问题,这里就可以使用变量price来替代输入,就只用输入一次
int price;
price = in.nextInt();
System .out .println("100-" + price+"=" + price);
JAVA是一种强类型语言,所有的变量在使用前必须定义,并且一经定义就不能在修改
在使用一个变量之前必须进行初始化,这里的Eclipse是可以帮助进行初始化,我们在违规操作时,会显示错误,点击就可以选择让它进行初始化。一行是可以定义多个变量的。
但是对于软件开发来说,一行还是就定义一个变量,这样方便后期的阅读以及维护。
常量的话我们要加上一个final,这样就是常量了,使用名称比数字更加通俗易懂,加final就类似C语言加const,加final变量的值就是不可修改的。
Java在编写的时候要输出一些提示性的文字来保证代码的可读性
package hello;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
// TODO Auto-generated method stub
System .out.println("你好!Echo:");
Scanner in = new Scanner(System .in );
// System.out.println("Elco:" + in.nextLine()); // + 可以连接两个字符串
int price = 0;
int amout = 0;
System .out .print("请输入票面:");
amout = in.nextInt();
System .out.print("请输入金额:");
price = in.nextInt();
System .out .println(amout + "-"+ price + "=" + (amout-price));
}
}
java基础----浮点数
计算机中的整形与浮点型是不同的,如果结果要求小数,那么我们的输入的数据也必须要是浮点型比如说我们这里计算身高换算,这里重要的就是那个+,这是将字符串连接起来
int feet = 0;
int inches = 0;
System .out .print("请输入身高的尺:");
feet = in.nextInt();
System .out.print("请输入身高的寸:");
inches = in.nextInt();
System .out .println("你的升高换算后是 :" +((feet+(inches/12))*0.3048));//小的括号不需要,下面说了规则
}
这我们将feet与inches两个变量设置成的是整形,导致inches/12时向下取整为0;发挥不了作用。所以我们这里必须要将两个数据换成浮点型才可以,时间长了都忘记这些基本的知识了。
double feet = 0;
double inches = 0;
这里还有一种解决方法就是把12变成12.0,这里就是因为运算要有浮点数才行。()机器只要检测到有浮点数就不会在自己取整了。
java符号优先级以及输入的数据类型
首先先说一下关于输出的理解,Java输出使用的是System.out.print();这和C语言里是完全不一样的,但是加双引号就是输出字符串,不加就是直接输出计算结果或者那个标识符的值,再写一遍关于输入的时候的先决条件:Scanner in = new Scanner(System.in);
java的输入都是in.next ();这空位处的首字母需要大写,这里与输入的位置以及数据类型有关,整形就是Int;浮点型就是Double;
Java运算的优先级和我们再数学上的基本是一样的,就是乘除的运算级比加减高,同级之间是自左向右,赋值是自右向左;需要注意的是正负号的优先级是最高的,所以这与数学中不一样:1 +2*-2 这个算式不需要打括号,所以 有的时候不要被习惯影响。
关于的,所以5 > 2 + 3会先计算加法然后再进行比较。
而
比如 4 > 3 = =5 > 4;就是先做两端的运算,得到true == true;所以还是true; 5 >4 >3 是错误的,因为会从左到右计算,也就是true > 3这是错误的。
true与false是不能比较大小的,只是两种状态;两个浮点数是不能用==来直接判断,因为计算机会有误差,而是应该使用两者之差的绝对值小于10e-5之类的非常小的一个数来判断是否相等。
Java的强制类型转化
上面的程序输出的是一个浮点数,但是我们要求是整数,这就要使用强制类型转换,我们再前面加上一个需要转换的类型名称就可以实现转换
System .out .println("你的升高换算后是 :" +(feet+(inches/12))*0.3048);//这里就是刚刚说的额外括号,不需要
System .out .println("你的升高换算后是 :" +(int)((feet+(inches/12))*0.3048*100)+"cm");
这里的强制类型转换只是括号右端的部分;比如int foot = 30/3.0;就是错误的,因为类型不匹配,但是 int foot = (int)30/3.0也是错误的,就是因为这里只转换了30;,因此只能加括号变成 int foot = (int)(30/3.0)
另外强制类型转换是不改变原结果的,只是对结果处理了一下再运用。
Java bool类型
Java在写一个出一个打印程序时,如果是可以输出的值就会输出;如果不能输出就会当作bool类型
System .out.print(5 > 3);
像这句代码的输出就是true;也就是说对于表达式输出的就是表达式的正误;但是这在C语言里就是不行的,这是因为Java简化了一些,输出的时候不需要规定类型,C的话就要加%; 比如 5 = = 6 = = true;这个会从左到右依次运算,就是false == true;就是错的;比如a > 7 > false;就是错的,因为false与true不能比较大小。
Java语句
首先时基本的条件判断语句if, if语句时以关键字if开头,之后紧跟一个小括号,里面记录判断语句,当里面的表达式为真时就执行语句,这里就、后面的大括号里面{}的若干语句,如果里面的语句只有一句,我们也是可以选择不写大括号的,这里我们时千万不能在if后面的括号里加分号的(分号代表语句的结束);所以就好理解了,为什么语句只能覆盖到下面的一句话;
if(total > amout)
total += amout;
像这里,我们就没有加大括号,语句的结束就是在amout后面,所以判断语句的囊括范围就看分号在那里就好了,而不是只要缩进就是其语句,这是错误的思想;不只是if是这样,其余的诸如while也是这样子的,只能管到下面的一条语句,因为下一条语句就有分号了,这样我们的while或者if就可以结束;
接下来我们就学习了一下流程图,这个就是我们高中数学里面的,这里我们在复习一下,每个in.nextInt()都会对于一个输入;if就会产生分叉;之后就是嵌套的if语句,这个是很好理解的,就不深入的讲解,,这些;
下一个就是级联,级联就是很多个if else语句,这个就是使用了else if,这里给一个建议就是要尽量减少输出的出口,这样就可以增加我们的代码的易修改性,这里我们就可以把级联if语句来衍生为switch语句;这个非常的方便,但是我们容易忘记写break;
这里我们总结一下我们常犯的错误,一个就是在语句后面加上分号;下一个就是我们把等号写成赋值语句,第三点建议就是我们要把加大括号,就算只有一行语句,还有就是注意缩进一个tab
下一个语句就是while语句,这样就可以自动的进行循环,这里又有一个快捷键,就是使用Ctrl + 方向键之后
下一条就是就是回顾一下获得每一位数,这里就是(num/10)%10, 这里就是我们 ------这又是一个小小的知识点; 这里我们可以获得整数的每一位的数;这里我们目前使用的就是和之前没有什么区别,要到之后才会真正地出现差异,这里还有就是while语句要注意给它加结束循环的条件,还有就是在改写for循环里就要记得写自增地语句;对于while循环,要满足括号里地语句才会继续执行我们的语句,千万不要在后面加分号,不然就是程序员的崩溃瞬间;还有就是要熟练地调试代码,还有就是我们选择合适的测试数据,一般选择边界,或者其他特殊的数据,还有就i是不能在小范围里测试数据;
do----while语句就是先做一次循环之后再看看是否满足条件,这个就是我们的do while语句就是要在while后面加一个分号表示整个do while的结束,这个千万不要死记,总之我们要认真的观察分号,千万不要滥用分号;
下面就是我们这些语句的运用,这里和之前的是一样的
import java.util.Scanner;
public class Main {
//习惯上要将首字母大写
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System .in);
int sum = 0;
int count = 0;
int num;
System .out.println("Hello,请输入数据,输入-1时输入结束");
num = in.nextInt();
while(num != -1)//软件只支持输入bool类型,不能输入1和0
{
// if(num == -1)//这里只是为了展示if的用法,其实这里可以把这个拿到判断里面去
// {
// break;
// }
sum += num;
count++;
num = in.nextInt();
}
if(count > 0)
{
System.out.println("平均数为:" + (double)(sum/count));
}
}
}
// 又有点问题,那个测试题,第二行也缩进了,但是也输出了
这里我们有有一点小的知识点就是随即数,这和C还是有一点小小的差别,这里就是使用的语句是
int number = Math.random();
这个就是可以得到0到1之间的浮点数,这里我们想得到1到100之间的数,那么我们就要int number = (int)(Math.random()*100 + 1);这样就可以输出了;
下面就是for 循环,这里在数据结构建立十字链表里面的时候我们在for循环后面加了一个分号,这样就是我们找到我们想要的边界;for循环与while循环是可以相互转换的。
下一个就是复合赋值,这个就是a +=6;就是 a = a + 6;还有就是Java里面就可以a / a+ 6;这个就是我们就要先运算右边的加法之后再进行除法;
对于循环,break与countinue都只能跳出一层for循环,那如果我们想要多跳出几重循环呢,这里就要使用一个OUT标记,这个与goto有点类似,但是也还是有很大的区别
for(int i = 0;i < num;i++)
{
OUT: //这是说明下面的第二重循环叫做out
for(int j = 0;j < num;j++)
{
for(int k = 0;k < num;k++)
{
if(arr[i][j] == 0)
{
break OUT;
}
}
}
}
这里就是我们将标记后面的那个循环叫做out,这样我们跳出的就是第二层循环
java入门----逻辑
bool类型,就是我们可以直接定义boolean IsP = true;之后就可以直接判断;还有就是&& || !;逻辑非的运算符更高
下一个知识点就是我们的浮点数运算一定要让运算符一边为浮点数,在对浮点数保留小数位数时,与C语言差不多,使用的是%.2f
System.out.println("%.2f",sum);//这里和C就有点相似了,所以有共同点
在我们求和时我们的每一项的符号时交替出现的,这时我们可以有另外一种解决方案,之前我们就只知道将其分为两个部分在求和,其实可以在前面设置一个标志sign = 1,之后每循环一次,我们就 sign = sign*-1;在for循环的括号里面我们就可以使用逗号然后输入多个部分;
这里有有一个以前的知识点就是求最大公约数,这里我们首先想到的应该不是辗转法,而是从1遍历到最小的那个数,使用一个记录然后就a%i&&b%i也是可以的;辗转相除法就是我们将大的那个数%小的那个数,之后大的数为小的数,小的数为其余数,当小的为0时结束,这里就可以使用while循环;
Java入门—数组
这些知识点都是之前讲过的,这里我们就是主要讲不同点,我们知道Java是没有指针的,也就不存在引用,这里我们定义数组或者内存使用的就是new,我们这里可以把当成一个动词看待,新创建一个数组
int[] arr = new int[100];
这里就是我们创建一个100大小的int类型的数组,数组就是一种容器,这个容器的类型都是相同的,并且其大小是固定的,所以有安全隐患;这里我们一定要注意不要超出容器的容量;**我们可以先输入一个长度cnt,然后就可以 int[] arr = new int[cnt];这里和C是不一样的,可以让其的长度是动态的;**并且还有一点就是Java会自己将数组给初始化,也就是我们不需要再使用for循环来初始化了;
这里我们可以调用Java的库语句,就是 . 的引用,比如我们想知道arr的长度直接就是 arr.lenth; 这又是与C不一样的地方,这样Java的可扩展性很多,
这里我们需要注意的是Java里面数组也是变量,是变量当然就可以赋值,(这在C里面是绝对不可以想象的)还有就是我们创建数组时的new是新开辟一组连续的空间来运算,这里的arr只是数组变量的管理者,而单个数字是所有者;
import java.util.Scanner;
public class Main {
//习惯上要将首字母大写
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System .in);
int[] arr = new int[10];//这里Java已帮我们初始化了
arr[0] = 5;
int[] brr = arr;//这里就是因为没有指针,数组也是变量,可以赋值
brr[0] = 16;
System .out.println(arr[0]);
}//这里得到的结果是16,为什么,这是因为我们定义时是[] arr,这个arr和int arr里的arr作用不同
}//这里arr只是一个管理者,类似于C的指针,内存是新开辟出来的,在另外的地方,所以改变的就是那个地方
//这里的数组名就只是一个管理员,而我们的赋值操作就是加一个管理员,所以管理员的权限一样,都可修改
,所以数组和数组变量是不一样的,所以我们使用的赋值操作并不能创建一个新的数组,要创建一个新的数组复制,只能遍历将原数组拷贝
int[] arr = new int[10];//这里Java已帮我们初始化了
int[] brr = new int[arr.length];//创建一个和arr相等大小的数组
for(int i = 0;i < brr.length;i++)
{
brr[i] = arr[i];//两者管理的是不同的数组了
}
对于二维数组,同样的方法来定义也是创建一个管理者:
int[][] arr = new int[3][5];
arr = {
{
1,2,3,4},
{
1,2,3},//这里可以自动补零,这是Java的特点
}
这里就是创建一个3行5列的数组,其余的遍历之类的操作与c语言是一样的
int[] [] arr = {}; arr.lenth是指的数组的行数,arr[i].lenth 是指每一行有几个元素,也就是列数,就是一个一维数组 今天的学习就到这里了,明天我将继续学习函数等内容,我会继续分享的~