Java入门基础学习源码,有C或C++语言基础的可以快速掌握

以下为完整源码,需要1.8版本JDK,否则部分新特性可能出现兼容问题,去掉注释号即可运行

package hello;

import java.util.Scanner;

public class Hello
{
public static void main(String[] args)
{
// TODO 自动生成的方法存根
/*
//这是第一个程序
System.out.println("这是一个减法计算器");
Scanner in = new Scanner(System.in);
int a;
int b;
System.out.print("请输入第一个数:");
a = in.nextInt();
System.out.print("请输入第一个数:");
b = in.nextInt();
System.out.println("结果:"+a+"-"+b+"="+(a-b));
*/

/*
//这是第二个程序
System.out.println(1.2-1.1);
int foot;
foot=32/(int)3.0;//强制类型转换
double inch;
Scanner in = new Scanner(System.in);
foot = in.nextInt();
inch = in.nextDouble();
double meter=(foot+inch/12)*0.3048*100;
System.out.println((int)meter+"CM");//强制类型转换
*/

/*
double a = 1.0;
double b = 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
System.out.println(a==b);
System.out.println("a="+a+";b="+b);
System.out.println(Math.abs(a-b)<1e-6);//判断浮点数是否相等不能直接判断,应该求其差的绝对值然后和一个比较小的数比较,因为浮点数计算有误差;

//初始化
Scanner in = new Scanner(System.in);
int blance = 0;
while(true)
{
System.out.print("请投币:");
int amount = in.nextInt();
blance = blance + amount;
System.out.println("当前已投币:"+blance+"元");
System.out.println(amount>=10);
if (blance >= 10)
{
System.out.println("*************");
System.out.println("*Java城际铁路专线*");
System.out.println("* 无指定座位票 *");
System.out.println("* 票价10元 *");
System.out.println("**************");
System.out.println("找零:"+(blance-10));
blance = 0;
}
}
*/

/*
//while循环
System.out.print("请输入一个整数:");
Scanner in = new Scanner(System.in);
int type = in.nextInt();
switch (type)
{
case 1:
System.out.println("输入了1");
break;
case 2:
System.out.println("输入了2");
break;
default:
System.out.println("输入的不是1和2");
break;
}
*/

/*
//do while 循环
Scanner in = new Scanner(System.in);
System.out.print("请输入一个数:");
int number = in.nextInt();
int count = 0;
do
{
number = number / 10;
count = count + 1;
}while(number>0);//最后的分号不能少
System.out.println("这是一个"+count+"位数");
*/

/*
//循环计数
int count = 10;
do {
System.out.println(count);
count = count -1;
} while (count>0);
System.out.println("发射!");
*/

/*
//求平均数
Scanner in = new Scanner(System.in);
int number = 0;
int sum = 0;
int count = 0;
do
{
System.out.print("请输入整数(-1代表已输入全部的数):");
number = in.nextInt();
if(number != -1)
{
count = count + 1;
sum = sum + number;
}
}while(number != -1);
if(count!=0)
System.out.println("数字的个数为:"+count+";平均数是:"+(double)sum/count);
else
System.out.println("没有输入任何有效数字");
*/

/*
//猜数程序
Scanner in = new Scanner(System.in);
int number = (int)(Math.random()*100+1);//[0,1)-->[0,100)-->[1,100]
int a;
int count=0;
System.out.println("提示:"+number);
System.out.print("亲输入你猜的数:");
a = in.nextInt();
count=count+1;
while(a!=number)
{
if(a>number)
System.out.println("偏大");
else if(a<number)
System.out.println("偏小");
System.out.print("亲输入你猜的数:");
a = in.nextInt();
count=count+1;

}
System.out.println("恭喜你猜对了,你猜了:"+count+"次");
*/

/*
//逆序输出
System.out.print("请输入一个正整数:");
Scanner in = new Scanner(System.in);
int number = in.nextInt();
int result = 0;
System.out.print("逆序输出:");
do
{
int digit = number % 10;
result = result * 10 + digit;
System.out.print(digit);
number = number / 10;
}while(number>0);
System.out.println();
System.out.println("逆序数字:"+result);
*/

/*
//算阶乘
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int factor = 1;
for(int i=1;i<=n;i++)
{
factor = factor * i;
}
System.out.println(factor);
*/

/*
//素数算法
//out://标号,可以让break跳出所标位置以下的循环里面的所有循环
for(int n=2;n<100;n++)
{
int isPrime = 1;
for (int i=2; i<n;i++)
{
if(n % i == 0)
{
isPrime = 0;
// System.out.println(n+"不是素数");
break;//终止循环;
//break out;//标号使用,continue也可使用
}
}
if(isPrime == 1)
System.out.print(n+" ");
// else
// System.out.println(n+"不是素数");
}
*/

/*
//求和1-1/2+1/3-1/4+1/5.........1/n
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0.0;
int sign = 1;
for(int i=1;i<=n;i++,sign = -sign)//可用逗号添加表达式
{
sum += sign*1.0/i;
}
System.out.println(sum);
System.out.printf("%.2f",sum);//个数控制
*/

/*
//求两个数的最大公约数
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int gcd = 1;
for(int i = 2;i<=a && i<=b; i++)
{
if(a%i == 0&&b%i == 0)
gcd = i;
}
System.out.println("最大公约数是:"+gcd);
*/

/*
//数组:找出一组数里面比平均数大的数并输出,同时输出平均数
Scanner in = new Scanner(System.in);
int sum = 0;
int count = 0;
count = in.nextInt();
if(count>0)
{
int[] numbers = new int[count];
for(int i=0;i<count;i++)
{
numbers[i] = in.nextInt();
sum = sum + numbers[i];
}
if(count!=0)
{
double average = sum/count;
for (int i = 0; i < count; i++)
{
if (numbers[i] > average)
System.out.print(numbers[i]+" ");
}
System.out.println();
System.out.println("数字的个数为:"+count+";平均数是:"+(double)sum/count);
}
else
System.out.println("没有输入任何有效数字");
}
//for(int i=0;i<number.length;i++)这样也可以,且比较好
*/

/*
//代码可扩展性,数组改变长度无需修改循环
Scanner in = new Scanner(System.in);
int[] scores = {87,98,69,54,65,76,87,99,100,103};
System.out.println(scores.length);
for (int i=0;i<scores.length;i++)
{
System.out.println(scores[i]+" ");
}
*/

/*
//数组名只是数组的管理者,并不是数组的所有者。
int a[]={1,2};
int b[]=a;
b[0]=5;
System.out.println(a[0]);//a[0]也会变成5,实际上a和b管理着的是同一个数组空间
*/

/*
//数组拷贝
Scanner in = new Scanner(System.in);
int a[]={1,2,3,4,5};
int b[]=new int[a.length];
for(int i=0;i<b.length;i++)
{
b[i]=a[i];
System.out.print(b[i]+" ");
}
*/

/*
//遍历数组
Scanner in = new Scanner(System.in);
int[] data = {1,2,34,5,6,7,8,54,5,3,54,35};
int x = in.nextInt();
int loc = -1;
for(int i=0;i<data.length;i++)
{
if (x==data[i])
{
loc = i;
System.out.println(x+"是第"+(loc+1)+"个");
}
}
if (loc==-1)
System.out.println(x+"不在数组中");
//仅查找是否有某数
for(int k : data)//这种循环是for-each循环,k为data中元素从0下标开始到最大下标遍历,且for-each循环不能更改数组值K为只读
{
if (k==x)
{
System.out.println("有这个数");
break;
}
}
// for -each格式:for(<类型> <变量>:<数组>)
// {
// ...
// }
*/

/*
//构造前50个素数算法
Scanner in = new Scanner(System.in);
int[] primes = new int[50];
primes[0] = 2;
int cnt = 1;
MAIN_LOOP://标号
for(int x = 3;cnt < 50;x++)
{
for(int i=0; i<cnt; i++)
{
if (x % primes[i]==0)
{
continue MAIN_LOOP;
}
}
primes[cnt++] = x;
}
for(int k:primes)
{
System.out.print(k+" ");
}
*/

/*
//构造素数表
Scanner in = new Scanner(System.in);
boolean[] isPrime = new boolean[100];
for(int i=0;i<isPrime.length;i++)
{
isPrime[i]=true;
}
for(int i=2;i<isPrime.length;i++)
{
if(isPrime[i])
{
for(int k=2;i*k<isPrime.length;k++)
{
isPrime[i*k]=false;
}
}
}
for (int i=2;i<isPrime.length;i++)
{
if(isPrime[i])
{
System.out.print(i+" ");
}
}
*/

/*
//井字棋程序
Scanner in = new Scanner(System.in);
final int size=3;
int [][] board=new int[size][size];
boolean gotResult = false;
int numOfX = 0;
int numOfO = 0;
//读入矩阵
for(int i=0; i<size;i++)//等价于for(int i=0; i<board.length;i++)
{
for(int j=0; i<size;j++)//等价于for(int j=0; i<board[i].length;j++)
{
board[i][j]=in.nextInt();
}
}
//检查行
//检查列
//检查对角线
//输出结果
*/

//以下是有关字符及字符串的内容
//包裹类型,integer是int的包裹类型,包裹类型可以有一些基础类型没有属性工具,例如:
// System.out.println(Integer.MAX_VALUE);
// System.out.println(Integer.MIN_VALUE);
// System.out.println(Integer.BYTES);
// System.out.println(Integer.SIZE);
//.运算符,例如a.length 在点的左边是一个对象或一个类,点的右边是这个对象或这个类能够提供的一些服务或数据或能做的一些动作
// System.out.println(Character.isDigit(‘一‘));//Character.isDigit()可以帮我们判断是不是数字
// System.out.println(Character.toLowerCase(‘A‘));//把A转化为小写

//String变量和数组变量一样,是管理者而不是所有者;
// String s=new String("gkfh");//创建了一个String的对象,用"gkfh"初始化这个对象,初见管理这个对象的变量s,让s管理这个对象
// String s="gkfh";//这样也是可以的,和数组一样,编译器帮你创建一个对象交给s来管理
//字符串可以使用+号来连接,如果一边是字符串,另一边不是字符串,系统会把不是字符串的那一部分表达为字符串

/*
//字符串读入
Scanner in = new Scanner(System.in);
String s;
s=in.nextLine();//读一整行
System.out.println(s);
// s=in.next();//读连续的一个单词,1234 56会读进1234
System.out.println(s);
System.out.println(s=="bye");//这种比较方法是错误的,即使s="bye",得到的结果也是false,因为s是对象是管理者和数组类似,如果要比较使用下一句的方法
System.out.println(s.equals("bye"));//比较两个字符串是否相等使用.equals()方法
*/

//字符串操作
String name="erwqer";
System.out.println(name.length());//算字符串长度
System.out.println(name.charAt(0));//输出name这个字符串的第一个字符,和数组一样,从0计数
for(int i=0;i<name.length();i++)
{
System.out.print(name.charAt(i));
}
System.out.println();
//字符串不能用for-each循环
//取子串
String s1="0123A56389汉字";
System.out.println(s1.substring(2));
System.out.println(s1.substring(2,4));//输出结果为"23",不是到第五个字符而是输出到第五个字符之前的内容,要注意
int loc=s1.indexOf(‘3‘);
System.out.println(s1.indexOf(‘2‘));//找字符
System.out.println(s1.indexOf(‘3‘,loc+1));//找字符,找3这个字符从loc+1这个位置开始找起
System.out.println(s1.indexOf("A56"));//找子串,得到的是开始位置
//s1.startsWith(t)判断是否以某个字符或字符串开头
//s1.endsWith(t)判断是否以某个字符或字符串结尾
//s1.trim()去掉字符串左右的空格
//s1.replaceAll(c1, c2);把这个字符串里面的所有c1都换成c2
//s1.toLowerCase()把字符串变成大写
//s1.toUpperCase()把字符串变成小写
//以上涉及到变更字符串内容的操作都不能改变s1本身,而是要把结果赋给其他字符串才行,例如赋给s2;形如s2=s1.toUpperCase(),输出s2得到想要的结果
//swith-case可用于字符串,但需要jdk 1.6以上版本支持(不含1.6)
// switch (s)
// {
// case "qwwe":
//
// break;
//
// default:
// break;
// }

//math类:abs求绝对值,pow求幂次,random可以给出随机数,round可以做一些四舍五入,范例:
// System.out.println(Math.abs(-12));//求-12绝对值
// System.out.println(Math.round(10.645));//结果是11,四舍五入了
// System.out.println(Math.random());//给一个[0,1)范围的数
// System.out.println(Math.pow(2, 3));//结果是8,即求得2的3次方值,是浮点的,所有可用小数
}
};

时间: 2024-10-16 18:50:43

Java入门基础学习源码,有C或C++语言基础的可以快速掌握的相关文章

Python源码剖析笔记0 ——C语言基础

python源码剖析笔记0--C语言基础回顾 要分析python源码,C语言的基础不能少,特别是指针和结构体等知识.这篇文章先回顾C语言基础,方便后续代码的阅读. 1 关于ELF文件 linux中的C编译得到的目标文件和可执行文件都是ELF格式的,可执行文件中以segment来划分,目标文件中,我们是以section划分.一个segment包含一个或多个section,通过readelf命令可以看到完整的section和segment信息.看一个栗子: char pear[40]; static

Android多线程研究(1)——线程基础及源码剖析

从今天起我们来看一下Android中的多线程的知识,Android入门容易,但是要完成一个完善的产品却不容易,让我们从线程开始一步步深入Android内部. 一.线程基础回顾 package com.maso.test; public class TraditionalThread { public static void main(String[] args) { /* * 线程的第一种创建方式 */ Thread thread1 = new Thread(){ @Override publi

JAVA上百实例源码以及开源项目

简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬.向往!此时此景,笔者只专注Android.Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能.编辑音乐软件的朋友,这款实例会对你有所帮助.Calendar万年历 1个目标文件EJ

【源码阅读】Java集合 - ArrayList深度源码解读

Java 源码阅读的第一步是Collection框架源码,这也是面试基础中的基础: 针对Collection的源码阅读写一个系列的文章,从ArrayList开始第一篇. [email protected] JDK版本 JDK 1.8.0_110 概述总结 ArrayList底层是通过数组实现的:其中capacity表示底层数组的长度,而ArrayList长度由size表示: ArrayList允许存放null元素,也可以查找null所在的index, 比如indexOf(), lastIndex

MINA2 源码学习--源码结构梳理

一.mina的整体框架结构及案例: 1.整体结构图: 简述:以上是一张来自网上比较经典的图,整体上揭示了mina的结构,其中IoService包含客户端IoConnector和服务端IoAcceptor两部分.即无论是客户端还是服务端都是这个结构.IoService封装了网络传输层(TCP和UDP),而IoFilterChain中mina自带的filter做了一些基本的操作之外,支持扩展.经过FilterChain之后最终调用IoHandler,IoHandler是具体实现业务逻辑的处理接口,具

Java并发编程 ReentrantLock 源码分析

ReentrantLock 一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大. 这个类主要基于AQS(AbstractOwnableSynchronizer)封装的 公平与非公平锁. 所谓公平锁就是指 在多个线程的争用下,这些锁倾向于将访问权授予等待时间最长的线程,换句话说也就是先被锁定的线程首先获得锁. 非公平锁正好相反,解锁时没有固定顺序. 让我们边分析源代码边学习如何使用该类 先来看一下构造参数,默认

《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包

Aomic数据类型有四种类型:AomicBoolean, AomicInteger, AomicLong, 和AomicReferrence(针对Object的)以及它们的数组类型, 还有一个特殊的AomicStampedReferrence,它不是AomicReferrence的子类,而是利用AomicReferrence实现的一个储存引用和Integer组的扩展类 首先,所有原子操作都是依赖于sun.misc.Unsafe这个类,这个类底层是由C++实现的,利用指针来实现数据操作 关于CAS

死磕 java集合之ConcurrentHashMap源码分析(三)

本章接着上两章,链接直达: 死磕 java集合之ConcurrentHashMap源码分析(一) 死磕 java集合之ConcurrentHashMap源码分析(二) 删除元素 删除元素跟添加元素一样,都是先找到元素所在的桶,然后采用分段锁的思想锁住整个桶,再进行操作. public V remove(Object key) { // 调用替换节点方法 return replaceNode(key, null, null); } final V replaceNode(Object key, V

死磕 java集合之LinkedHashSet源码分析

问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashSet支持按元素访问顺序排序吗? 简介 上一节我们说HashSet中的元素是无序的,那么有没有什么办法保证Set中的元素是有序的呢? 答案是当然可以. 我们今天的主角LinkedHashSet就有这个功能,它是怎么实现有序的呢?让我们来一起学习吧. 源码分析 LinkedHashSet继承自HashS