Java程序入门教程 | Java
有一个朋友这样告诉我:Java太难了!上课老师不讲代码,我怎么学?!
我也发现了,以我们学校为例吧。很多Java教学者似乎不太愿意细嗦代码怎么写。(在大一已经学习过C语言的基础上,Java其实真的很简单!!)他们热衷于告诉你“Java是面向对象的编程语言”或者告诉你一些关于对象、包、方法、继承等等概念,然而他们达到了某种共识,就是不讲代码怎么写。
于是就有了这篇博文。我将分享我做的六道基础的课后题目和完整的代码,中间会穿插一些补充的小笔记,希望可以帮助有同样需求的同学快速找到写Java代码的感觉。由于题目很简单啦,大佬到这里直接退出就好,剩下的萌新在这里集合。
特别提示:看代码的时候不要忘了看看小笔记,它们应该是有助于你理解代码的!
目录
题目一:单词结尾 | 代码演示
--题目描述--
--补充笔记--
笔记1:什么是方法?
笔记2:Scanner包[1]
笔记3:简单的java入门模板
笔记4:创建对象[1]
笔记5:数组基础
笔记6:方法的调用
笔记7:输出基础
笔记8:关于上图的补充解说
--完整代码--(保存在文件W1T2.java中)
笔记9:关于字符串String和字符数组char[]的补充
题目二:括号深度 | 条件语句和循环语句
--题目描述--
--补充笔记--
笔记10:条件语句if,switch
笔记11:循环语句for、while、do...while
笔记12:Scanner包[2]
--完整代码--(保存在文件W4T1.java中)
题目三:计算树上根到叶的距离 | 数组 | 不同数据类型之间的转换
--题目描述--
--补充笔记--
笔记13:不同数据类型之间的转换
--完整代码--(保存在文件W4T2.java中)
题目四:方法的实现 | 自定义方法
--题目描述--
--补充笔记--
笔记14:自定义方法
--完整代码--(保存在文件W3T4.java中)
题目五:字符串递增 | 字符串的基本操作
--题目描述--
--补充笔记--
笔记15:字符串的基本操作
--完整代码--(保存在文件W4T5.java中)
题目六:前缀波兰表达式 | 栈基础
--题目描述--
--补充笔记--
笔记16:创建对象[2]
--完整代码--(保存在文件W4T4.java中)
结束语
话不多说,我们先来看看第一个题目。
题目一:单词结尾 | 代码演示
--题目描述--
--补充笔记--
笔记1:什么是方法?
Java中的“方法”可以被简单类比为C语言中的“函数”。
笔记2:Scanner包[1]
Scanner是Java自带的一个包,至于什么是包......在这里,你可以暂时把它类比成C语言里的头文件。
在C语言中,假设你需要用到数学函数sin(x),你需要在代码开头放上这么一句:
#include <math.h>
同样的,在java中,有些方法也需要这样的提前声明,具体的引用形式见下:
import java.util.Scanner;
笔记3:简单的java入门模板
public class <文件名> {public static void main(String [] args) {<主程序>}
}
相关的解释如下。
public:public是一个访问说明符。其他的访问说明符还有protected和private,噢我的上帝啊,既然你是入门,就不用知道太多了。总之记住三点,第一,类、方法和变量都可以声明访问说明符;第二,当你不声明访问说明符的时候,它默认为public。第三,在刚学的时候,你只需要用public就可以了。
static:static是修饰符,表示静态方法。其他修饰符还有final,abstract等。在不声明修饰符的情形下,默认为static。类似地,在刚学的时候,你只需要用static就可以了。
class:class的意思是类。class后面跟着的必须是你的文件名。例如,假设你的这个文件叫做HelloWorld.java,那么相应在class后面必须填HelloWorld(区分大小写)。知道这么多就足够了!如果进一步解释,我可能会说Java中的“类”可以类比为C语言中的“结构体”以方便大家理解,不过这个比喻是不太恰当的,“类”其实比结构体复杂的多,感兴趣的同学可以自行了解。
public static void main(String [] args):也可以写为public static void main(String args[]),后面会加以进一步解释。这是一个存在于你写的class中的方法,而且它是主方法,里面是要执行的主程序。别管为什么,这么写就对了,而且一个符号一个字母都别改嗷!
备注:<>表示的内容根据你的程序而改变,在套用这个模板的时候,其他地方都不要改,只要改“<>”里面的内容就可以了。
笔记4:创建对象[1]
其实Java里一般不说“对象”,而是说“实例”,不过没有关系,因为大家熟悉的是“对象”这个词语,我就先沿用这个词。
基础对象包括int,float,double,long,char,String和boolean等类型,与C++完全相同的引用方法。例如:
int a = 100;
char b = '%';
boolean c = false;
都是合法的引用方式。
笔记5:数组基础
关于数组的声明方式有两种,此处以创建大小为10的整型数组为例,第一种如下
int [] array;
array = new int[10];
第二种改变了中括号的位置
int array[];
array = new int[10];
一般使用第一种。此外,也可以采用下面的复合形式
int [] array = new int[10];
笔记6:方法的调用
前面说到,Java中的方法可以暂时看作是C语言中的函数,像函数保存在头文件里一样,在Java中,方法是保存在包里的。
在Java中,要调用包里的方法,用符号“.”。
例如,要使用Scanner包里的方法next,用Scanner.next()
System也是一个包,因为它是Java内置的包,因此不需要在开头使用import引入。
例如,要使用标准输出,可以采用System.out.println();
笔记7:输出基础
下面给出一些常见的输出方式
第一种方式:输出一个变量
System.out.print(...);
第二种方式:输出一个变量,但是相对于第一种输出方式,它会在输出结束后自动换行
System.out.println(...);
第三种方式:C语言形式的输出方式
System.out.printf(...);
阅读下面的代码
public class test {public static void main(String[] args) {int x = 5;String str = "Java";System.out.println(x);System.out.println(str);System.out.print(x);System.out.print(str);System.out.println();System.out.println(x+" "+str);System.out.printf("%d\n",x);}
}
运行程序,输出如下。相当容易理解,我就不多解释了。
笔记8:关于上图的补充解说
看上图的最后一句中“退出代码0”。
如果退出代码0,表示程序顺利执行完成了;如果非0,表示执行过程中出现了什么问题。
--完整代码--(保存在文件W1T2.java中)
import java.util.Scanner;
public class W1T2 {public static void main(String [] args) {Scanner s = new Scanner(System.in); //创建一个读写器s,s用来读入String a = s.next(); //将s读入的内容存入变量as.close(); //读写器关闭,即停止读入char[] str = a.toCharArray(); //将字符串a转换为一个字符数组,并且存入字符数组str中int len = str.length, flag = 3;if ( (str[len-2]=='e' && str[len-1]=='r') || (str[len-2]=='l' && str[len-1]=='y') )flag = 1;else if (str[len-3]=='i' && str[len-2]=='n' && str[len-1]=='g')flag = 0;for (int i=0;i<len-3+flag;i++) {System.out.print(str[i]); //逐位输出字符数组}System.out.println();}
}
笔记9:关于字符串String和字符数组char[]的补充
在Java中,这两个是不太一样的,和C也有很大不同。例如,假设str是字符数组,要引用它的第一个字符,应该是str[0];然而,如果str是字符串,要引用它的第一个字符,str[0]会产生错误,正确的引用方法是str.charAt(0)。charAt是String包里的一个方法。
题目二:括号深度 | 条件语句和循环语句
--题目描述--
--补充笔记--
笔记10:条件语句if,switch
使用方式完全同C语言。
笔记11:循环语句for、while、do...while
使用方式完全同C语言。
笔记12:Scanner包[2]
刚刚介绍了什么是包,忘了介绍Scanner。
常见的语句如下。
第一步,创建一个读写器s。
Scanner s = new Scanner(System.in);第二步,读入你要读的内容,并且存入变量。
例如,我要读一个字符串,并且把它存入String类型的变量a中:
String a = s.next();
其他的数据同理,例如:
int b = s.nextInt();
long c = s.nextLong();
float d = s.nextFloat();
double e = s.nextDouble();
在上面的s.next()中,读到回车或者空格就会自动停止,下面的语句帮助我们一次性读一整行:
String f = s.nextLine();第三步,关闭读写器。
s.close();
--完整代码--(保存在文件W4T1.java中)
备注:方法看不懂的话可以参考我在2022年8月22号小学期写过的一篇博文。
-> http://t.csdn.cn/oVY92
import java.util.Scanner;
public class W4T1 {public static void main(String[] args) {Scanner s = new Scanner(System.in);String str = s.nextLine();int MaxDepth=0, depth=0;int len=str.length();for (int i=0; i<len; i++) {if ( str.charAt(i)=='(' || str.charAt(i)==')' ) {if ( str.charAt(i)=='(' ) {depth++;MaxDepth = Math.max(MaxDepth, depth);}else depth--;}}System.out.println(MaxDepth);}
}
题目三:计算树上根到叶的距离 | 数组 | 不同数据类型之间的转换
--题目描述--
--补充笔记--
笔记13:不同数据类型之间的转换
(1)基本的数据类型
把基本数据类型按照精度从低到高排列的顺序如下:
byte < short < int < long < float < double
从低级向高级类型的转换,系统将自动执行;但如果是从高级向低级类型转换,可能导致数据精度的损失。例如,
double a = 5.01;
int b = (int)a;
得到的b的结果为5,发生了损失。
(2)字符串和其他类型
①字符串和基本数据类型
把基本数据类型转换为字符串,使用valueOf方法。例如:
int a = 5;
String str_a = String.valueOf(a);
double b = 5.000;
String str_b = String.valueOf(b);
boolean c = true;
String str_c = String.valueOf(c);把字符串转换为基本数据类型,使用相应的方法。例如:
String str_d = "4";
int d = Integer.parseInt(str_d);
String str_e = "8.99";
double e = Double.parseDouble(str_e);
② 字符串和字符数组:
字符数组转换为字符串,使用char[].toString()方法,例如:
char [] ch = new char[10];
ch[0] = 'A';
ch[1] = 'B';
String str = ch.toString();
容易知道此时str="AB"。字符串转换为字符数组,使用String.toCharArray()方法,例如:
String str = "Hello";
char [] ch = str.toCharArray();
容易知道ch="Hello"。
--完整代码--(保存在文件W4T2.java中)
先创建树,然后从上到下依次计算每个结点的值,并且在这个过程中实时更新最大值。
import java.util.Scanner;
public class W4T2 {public static void main(String[] args) {Scanner s = new Scanner(System.in);String str = s.nextLine();//如果是空树,直接输出0if (str.length()==0) {System.out.println(0);}else {long [] number = new long[10000];long [] cal = new long[10000];String[] num = str.split(" "); //按照空格分割字符串int n=1;for (String k:num) {number[n] = Integer.parseInt(k); n++;} n--;long Max=Long.MIN_VALUE; //MIN_VALUE是最小值cal[1] = number[1];for (int i=2;i<=n;i++) {cal[i] = number[i] + cal[i/2];if (i*2>n && cal[i]>Max) {Max = cal[i];}}System.out.println(Max);}}
}
题目四:方法的实现 | 自定义方法
--题目描述--
--补充笔记--
笔记14:自定义方法
像C语言可以自定义函数一样,Java也可以自定义方法。
方法要放在类中。一个基本的静态方法的声明方式是
public static <类型> <函数名>(数据类型1 变量1, 数据类型2 变量2, ..., 数据类型n 变量n)
{...}
例如,下面是C语言中计算整数x和整数y的和的函数,
int som(int x, int y) {return x+y;
}
下面是在Java中实现相同功能的方法,
public static int som(int x, int y) {return x+y;
}
这么一对比下来,是不是觉得立马熟悉起来了?
当然,关于方法重载、传递啥的东西就不是今天要介绍的内容了。记住,这篇文章是[帮助新手入门]的,没有那么深入。
--完整代码--(保存在文件W3T4.java中)
import java.util.Scanner;
public class W3T4 {public static long som(long x, long y) {return x+y;}public static long mini(long x, long y) {return Math.min(x,y);}public static long maxi(long x, long y) {return Math.max(x,y);}public static long gcdi(long x, long y) {x = Math.abs(x);y = Math.abs(y);while (x%y!=0) {x=x%y;if (x<y) {long temp = x; x=y; y=temp;}}return y;}public static long lcmu(long x, long y) {return Math.abs(x/gcdi(x,y)*y);}//主方法public static void main(String[] args) {Scanner s = new Scanner(System.in);String func = s.nextLine();long [] array = new long[200];String inp = s.nextLine();String [] inpu = inp.split(" ");int n=0;for (String data : inpu) {array[n] = Long.parseLong(data);n++;}long init = s.nextLong();//这里也可以写成switch的形式if (func.equals("som")) {for (int i=0;i<n;i++) {array[i] = som(init,array[i]);init = array[i];}}else if (func.equals("mini")) {for (int i=0;i<n;i++) {array[i] = mini(init,array[i]);init = array[i];}}else if (func.equals("maxi")) {for (int i=0;i<n;i++) {array[i] = maxi(init,array[i]);init = array[i];}}else if (func.equals("gcdi")) {for (int i=0;i<n;i++) {array[i] = gcdi(init,array[i]);init = array[i];}}else if (func.equals("lcmu")) {for (int i=0;i<n;i++) {array[i] = lcmu(init,array[i]);init = array[i];}}//输出for (int i=0;i<n;i++) {System.out.print(array[i]);if (i!=n-1) System.out.print(" ");else System.out.println();}}
}
题目五:字符串递增 | 字符串的基本操作
--题目描述--
--补充笔记--
笔记15:字符串的基本操作
可以像C++一样直接用“+”连接两个字符串,但不能连接字符和字符串或者字符串和字符。
可以用“+”直接连接字符串和基本数据类型。
下面介绍String包里一些常用的方法。
1、valueOf()方法:把其他数据类型转换为String类型。
2、toCharArray()方法:可以将字符串转换为字符数组。
3、split()方法:将字符串按照需要的方式分割。
示例:
String ex3 = "It is a sunny day.";
String [] c = str.split(" ");
for (String i:c) {System.out.println(i);
}
输出:
It
is
a
sunny
day.4、charAt()方法:取字符串上的字符。
示例:
String ex4 = "Java";
System.out.println(ex4.charAt(0));
输出:
J5、length()方法:获取字符串的长度。
6、subString()方法:获取字符串的子串。
示例:
String ex6 = "Date10/13";
String d = ex6.substring(4); //从第5个字符开始截取,一直到字符串结束
String e = ex6.substring(4,7); //从第5个字符开始截取,到第8个字符结束,不包括第8个字符
System.out.println(d);
System.out.println(e);
输出:
10/13
10/7、equals()方法和equalsIgnoreCase:比较两个字符串是否相等。前者区分大小写,后者不区分大小写。
备注:equals()和“==”不一样。
8、startsWith()和endsWith()方法:检测字符串是否以指定的字符串开始或者结尾。
9、compareTo()方法:比较两个字符串。如果返回值大于0,表示字符串大于比较对象,其他返回值情形略。
10、indexOf()方法:搜索字符或子字符串首次出现的位置。
11、lastIndexOf()方法:搜索字符或子字符串最后一次出现的位置。
12、concat()方法:用来连接两个字符串,相当于“+”。
13、replace(char, char)方法:用一个指定字符替换掉字符串中的另一个指定字符。
14、trim()方法:去除字符串前后多余的空格。
其他方法:getChars(),getNytes等
--完整代码--(保存在文件W4T5.java中)
把字符串分成前面的非数字部分和后面的数字部分,对后面的字符串进行操作。
import java.util.Scanner;
public class W4T5 {//定位非数字部分和数字部分的分界public static int location(String s) {int i = s.length();while ( i>0 && s.charAt(i-1)>='0' && s.charAt(i-1)<='9' ) {i--;}return i;}//对数字部分进行+1的操作public static String add(String s, int loc) {int len = s.length();if ( len==loc ) {return (s+"1");}else {String sub1 = s.substring(0,loc);String sub2 = s.substring(loc);int l = sub2.length()-1 ;if ( sub2.charAt(l)=='9' ) {while ( l>=0 && sub2.charAt(l)=='9' ) {String subb1 = sub2.substring(0,l);String subb2 = "0";String subb3 = sub2.substring(l+1);sub2 = subb1 + subb2 + subb3;l--;}if ( l==-1 ) {sub2 = "1" + sub2;}else {String subb1 = sub2.substring(0,l);int p = Integer.parseInt( sub2.substring(l,l+1) );p++;String subb2 = String.valueOf(p);String subb3 = sub2.substring(l+1);sub2 = subb1 + subb2 + subb3;}}else {int p = Integer.parseInt(sub2.substring(l));p++;sub2 = sub2.substring(0, l) + p;}return sub1+sub2;}}//主方法public static void main(String[] args) {Scanner scan_in = new Scanner(System.in);String aline = scan_in.nextLine();int i = location(aline);String s = add(aline, i);System.out.println(s);}
}
题目六:前缀波兰表达式 | 栈基础
--题目描述--
--补充笔记--
笔记16:创建对象[2]
对于非基本的数据类型,一般可以用new来实例化。
String b = new String();
//等价于String b;
其中,new String()是冗余的,可以去掉。
又如下面展示栈的实例化,
Stack<Integer> S1 = new Stack<Integer>();
//或者Stack<Integer> S1 = new Stack<>();
Stack<String> S2 = new Stack<String>();
//或者Stack<String> S2 = new Stack<>();
但是队列可以吗?尝试以下代码,
Queue<String> Q = new Queue<String>();
会出现这样的错误,
由此可知,new只能用于静态模板。
--完整代码--(保存在文件W4T4.java中)
import java.util.Scanner;
import java.util.Stack;
public class Main {//判断是运算符还是其他字符public static int tdf(String s) {if ( s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/") || s.equals("%") ) {return 0;}else return 1;}//执行计算的方法public static String calculate(String dt1, String dt2, String op) {double d1 = Double.parseDouble(dt1);double d2 = Double.parseDouble(dt2);switch (op) {case "+": d2 = d2 + d1; break;case "-": d2 = d2 - d1; break;case "*": d2 = d2 * d1; break;case "/": d2 = d2 / d1; break;case "%": d2 = d2 % d1; break;}return String.valueOf(d2);}//主方法public static void main(String[] args) {Scanner scan_in = new Scanner(System.in);String aline = scan_in.nextLine();String [] keys = aline.split(" ");Stack<String> S = new Stack<>();int len = keys.length;for (int i=len-1; i>=0; i--) {if ( tdf(keys[i])==1 ) {S.push(keys[i]);}else {String w1 = S.pop();String w2 = S.pop();w2 = calculate(w2, w1, keys[i]);S.push(w2);}}System.out.printf("%.4f\n",Double.parseDouble(S.pop()));}
}
结束语
希望可以帮助到你。嗯,没了,不知道该写啥。
哦对了,全文共10818字,写了小半天。如果真有帮助的话,给个免费的赞不过分吧呜呜~
唔,如果对文章内容有什么疑问,或者觉得有哪里写的不正确,欢迎讨论~
Java程序入门教程 | Java相关推荐
- JAVA基础入门教程——Java介绍
1. Java简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称,目前由Oracle拥有. Java可运行于多个平台,如Win ...
- 【Java mail 入门教程】第三讲 接收邮件
====================================================== 注:本文源代码点此下载 ================================= ...
- java 接口入门,Java接口入门教程解读
Java接口入门教程解读,学习Java技术开发是一个长期的过程,今天小编介绍Java接口相关知识内容 接口 是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法 ...
- 越来越多的Java程序员转行Java大数据...
JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA. 但是,在未来肯定是大数据的天下,人工智能的爆发,将 ...
- java跟python对比_【多年的Java程序员总结Java与Python的对比 】
多年的Java程序员总结Java与Python的对比 作为一个有多年职场经验的技术员,每当我遇到同行时,我都会问一句"你现在用的是什么语言?你喜欢用哪种语言?"至于答案,容后再说. ...
- matlab调用Java程序时出现 Java.lang.OutOfMemoryErrot: GC overhead limit exceeded
matlab调用Java程序时出现 java.lang.OutOfMemoryError: GC overhead limit exceeded JDK1.6.0_37和JDK_1.7.0_60版本, ...
- mysql连接java程序_实现Java连接mysql
Java连接mysql数据库,代码经过运行准确无误. 下面为实例----> 用数据库操纵工具(例: SQLyogEnt)操纵mysql建表,或dos下建,如下: 数据库名:scutcs 表名:s ...
- 微信小程序入门教程+案例demo
微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...
- Java程序设计基础——简单Java程序
简单Java程序 一.Java应用程序 1.HelloWorldApp 源代码: 编译运行: 二.Java小应用程序 1.HelloApplet 源代码: 编译运行: 2.firstApplet 源代 ...
最新文章
- 洛谷p1162填涂颜色(dfs写法)
- MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)
- Dubbo详解-说明(一)
- C#异步编程(一):异步基础
- zabbix报警收到tcmime.1456.1456.1878.bin附件邮件
- 在linux中dns不安装coching,ubuntu 8.04下openldap的安装和使用
- 工作84:模板字面量
- 笔试题 - 阶乘问题
- vue解构赋值_前端开发es6知识 模块化、解构赋值、字符串模板
- 【Java教程系列】JavaSE核心知识点总结
- python快速入门 数据输出和基本类型 常用的循环遍历等
- 看 设计模式之策略模式探讨初步 有感,并摘取部份内容,学习之
- js获取(URL)地址栏参数
- list vue 添加数据方法_在PySpark数据框中添加新列的5种方法
- [unity3d]插件2d toolskit
- Atitit.常见的异常分类 目录 1. 双元分类法	1 1.1. 按照语言分 java js c# php等	1 1.2. 通用常见异常vs 特定异常	1 1.3. Runtime ex vs c
- 【MySQL】与【Oracle】
- javascript 计时器,消失计时器
- 动易sf生成html,动易节点“模板选项”与“分页标签”的关系
- WebService入门(二)wsimport的使用