有一个朋友这样告诉我: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相关推荐

  1. JAVA基础入门教程——Java介绍

    1. Java简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称,目前由Oracle拥有. Java可运行于多个平台,如Win ...

  2. 【Java mail 入门教程】第三讲 接收邮件

    ====================================================== 注:本文源代码点此下载 ================================= ...

  3. java 接口入门,Java接口入门教程解读

    Java接口入门教程解读,学习Java技术开发是一个长期的过程,今天小编介绍Java接口相关知识内容 接口 是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法 ...

  4. 越来越多的Java程序员转行Java大数据...

    JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA. 但是,在未来肯定是大数据的天下,人工智能的爆发,将 ...

  5. java跟python对比_【多年的Java程序员总结Java与Python的对比 】

    多年的Java程序员总结Java与Python的对比 作为一个有多年职场经验的技术员,每当我遇到同行时,我都会问一句"你现在用的是什么语言?你喜欢用哪种语言?"至于答案,容后再说. ...

  6. 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版本, ...

  7. mysql连接java程序_实现Java连接mysql

    Java连接mysql数据库,代码经过运行准确无误. 下面为实例----> 用数据库操纵工具(例: SQLyogEnt)操纵mysql建表,或dos下建,如下: 数据库名:scutcs 表名:s ...

  8. 微信小程序入门教程+案例demo

    微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...

  9. Java程序设计基础——简单Java程序

    简单Java程序 一.Java应用程序 1.HelloWorldApp 源代码: 编译运行: 二.Java小应用程序 1.HelloApplet 源代码: 编译运行: 2.firstApplet 源代 ...

最新文章

  1. 洛谷p1162填涂颜色(dfs写法)
  2. MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)
  3. Dubbo详解-说明(一)
  4. C#异步编程(一):异步基础
  5. zabbix报警收到tcmime.1456.1456.1878.bin附件邮件
  6. 在linux中dns不安装coching,ubuntu 8.04下openldap的安装和使用
  7. 工作84:模板字面量
  8. 笔试题 - 阶乘问题
  9. vue解构赋值_前端开发es6知识 模块化、解构赋值、字符串模板
  10. 【Java教程系列】JavaSE核心知识点总结
  11. python快速入门 数据输出和基本类型 常用的循环遍历等
  12. 看 设计模式之策略模式探讨初步 有感,并摘取部份内容,学习之
  13. js获取(URL)地址栏参数
  14. list vue 添加数据方法_在PySpark数据框中添加新列的5种方法
  15. [unity3d]插件2d toolskit
  16. Atitit.常见的异常分类 目录 1. 双元分类法 1 1.1. 按照语言分 java js c# php等 1 1.2. 通用常见异常vs 特定异常 1 1.3. Runtime ex vs c
  17. 【MySQL】与【Oracle】
  18. javascript 计时器,消失计时器
  19. 动易sf生成html,动易节点“模板选项”与“分页标签”的关系
  20. WebService入门(二)wsimport的使用

热门文章

  1. Windows 11 企业版新功能介绍
  2. 解决Program received signal SIGSEGV, Segmentation fault.的辛酸
  3. Visual Studio 历史简介
  4. PHP日期转换为时间戳
  5. 开源免费的舆情系统的架构
  6. mini2440的LEDS驱动程序和测试程序详解
  7. mini2440一线触摸驱动代码的位置
  8. wps excel 链接url转图片工具
  9. 常见MIME类型设置方法
  10. FMDB数据库的升级