Scanner in=new Scanner(System.in);
int a = in.nextInt();
System.out.print("a的值为:"+a);
//System.out.println(); 会换行
基本语法
Scanner in = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
package com.htk.base;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()){
String str = scanner.next();
System.out.println("输出内容为"+str);
}
//判断用户有没有输入字符串
if(scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("输出内容为"+str);
}
//凡是IO流的类如果不关闭就会一直占用资源,要养成良好的习惯用完就关
scanner.close();
}
}
package com.htk.base;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
int i = 0;
float f = 0.1f;
System.out.println("请输入整数:");
//判断用户有没有输入整型
if(scanner.hasNextInt()){
i= scanner.nextInt();
System.out.println("输出内容为" + i);
}else{
System.out.println("输入的不是整数数据");
}
System.out.println("请输入浮点数:");
//判断用户有没有输入实数
if(scanner.hasNextFloat()){
f= scanner.nextFloat();
System.out.println("输出内容为" + f);
}else{
System.out.println("输入的不是整数数据");
}
//凡是IO流的类如果不关闭就会一直占用资源,要养成良好的习惯用完就关
scanner.close();
}
}
练习
题目要求:输入多个数字,并求其综合与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并执行结果
package com.htk.base;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//和
int sum = 0;
//计数
int count =0;
//平均数
float ave = 0.0f;
System.out.println("请输入若干整数:");
//判断用户有没有输入整型
while (scanner.hasNextInt()) {
int i = scanner.nextInt();
sum = sum + i;
count++;
}
ave = sum / count;
System.out.println("总和为"+sum);
System.out.println("平均数为"+ave);
//凡是IO流的类如果不关闭就会一直占用资源,要养成良好的习惯用完就关
scanner.close();
}
}
java是强类型语言,所有变量都需要严格定义数据类型。
位(bit) 1 0 1 0的就是一位
字节(Byte)8位一字节 1B=8b
字符:指计算机中使用的字母,数字,字和符号。
基本数据类型 | 范围 | 占用字节 |
---|---|---|
byte | -128 — 127 | 1字节 |
short | -32768 — 32767 | 2字节 |
int | -2147483648 — 22147483647 | 4字节 |
long | -9223372036854775808 — 9223372036854775807 后面需跟L识别 | 8字节 |
float | 4字节 | |
double | 8字节 | |
char | 2字节 | |
boolean | 只有ture和false两个值 | 1字节 |
整数扩展
//定义long变量
long a=100000000000L;
int i=10;
int j=010;
int k=0x10;
System.out.print(i); //输出10
System.out.print(j); //输出8
System.out.print(k); //输出16
浮点扩展
注意:比较两个浮点数
float f1=0.1f;
double f2=1.0/10;
System.out.print(f1==f2); //结果是false,是有误差的接近但不等于,最好完全避免浮点数表示
Math.abs(f1-f2)<1e-6; //浮点数计算有误差
字符扩展
转换优先级
byte,short,char—>int—>long—>float—>double
高到低转换时,要避免内存溢出和精读问题
不能对布尔值进行转换
不能把对象类型转换为不相干的类型
补充: JDK7新特新,数字之间可以用下滑线分割,下划线不会输出
变量
变量作用域
public class Demo{
//类变量 static 从属于这个类,一起出现一起消失
static double salary = 25000;
//属性:变量
//实例变量:从属于对象;若没有初始化,输出默认值默认值为0
//布尔值:默认值是false
//除了基本类型,其余的默认值都是null
String name;
int age;
//main方法
public static void main(String[] args){
//局部变量:必须声明和初始值
int i=10;
System.out.print(i); //输出10
//变量类型 变量名字 = new Demo();
Demo demo = new Demo();
System.out.print(demo.age); //输出0,没有初始化,输出默认值默认值为0.
//类变量 static 从属于这个类,一起出现一起消失
System.out.print(salary)
}
//其他方法
public void add(){
}
}
常量
public class Demo{
//修饰符,不存在先后判断
static final double PI = 3.14159;
public static void main(String[] args){
System.out.print(PI)
}
}
基本运算符(operater)
算术运算符
+,-,*,/,%,++,--
整型运算如果有long则返回long,有double则返回double,其余都是返回int型
自增自减,++a,先++后输出;a++先输出后++
Math 数学工具类 double pow = Math.pow(3,2)
赋值运算符
=
关系运算符
>,<,>=,<=,!=,==
逻辑运算符
&&,||,!
短路原则:
当使用&&时,与运算若前一项为F,则不去进行后一项的判断。
当使用||时,或运算时当前一项是T,的\则不去计算后一项
位运算符
&,|,^,~,<<,>>,>>>
public class Demo{
//修饰符,不存在先后判断
static final double PI = 3.14159;
public static void main(String[] args){
/*
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~B = 1111 0010
面试题:2*8这么运算最快?
2 = 0000 0010
8 = 0000 1000
我的思考是 左移一位吧,8是2的3次,再乘2就是2的4次,相当于左移一位
System.out.print(8<<1)
*/
}
}
条件运算符
// ?:
//x?y:z
//若x==ture,则结果为y,否则结果为z
扩展赋值运算符
+=,-=,*=,/=,%=
字符串连接符 +,String
public class Demo{
//修饰符,不存在先后判断
static final double PI = 3.14159;
public static void main(String[] args){
int a=2;
int b=3;
System.out.print("String"+a+b) //后面会变成字符串链接,不会计算
System.out.print(a+b+"String") //先运算后链接字符串
}
}
包的本质就是文件夹(package)
包语句的语法格式为:
package pkg1[.pkg2[.pkg3]];
一般将公司域名倒置作为包名 com.baidu.www
导入包 import java.util.*
javadoc命令使用来生成自己API文档的
参数信息
/**
*@author htk
*@version 1.0
*@since 1.8
*/
public class Doc{
String name;
public static void main(String[] args){
}
// 输入/**会出现参数信息
public String test(String name){
return name;
}
}
if - elses,switch-case需要注意的问题
//1.在if或else后面总是用{}
//2.级联if - else if - else
//3.if语句常见错误
//1.忘记大括号
//2.if后面有分号
//3.错误使用==和=
//4.switch-case
/*
jdk7开始,switch支持字符串String类型
补充: java --- class(字节码文件) --- 反编译(IDEA) 每一个字符串都有一个hashcode,有个hash值
case 必须是常量或者字符串常量
*/
//求和,求阶乘,求平均数
for(i=0;i<n;i=i+1)
{
sum=sum+i;
fact=fact*i;
}
ave=sum/n;
//枚举
for(one=0;i<amount;one++)
{
for(five=0;five<amount/5;five++)
{
for(ten=0;ten<amount/10;ten++)
{
for(twenty=0;twenty<amount/20;twenty++)
{
if(one+five*5+tne*10+twenty*20==amount)
System.out.print(one+"张1元"+five+"张5元"+tne+"张10元"+twenty+"张20元");
}
}
}
}
package com.htk.base;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
for(int i=1;i<=1000;i++)
{
if (i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0){
System.out.println();
}
}
System.out.println();
}
}
package com.htk.base;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//上三角形式,小的数在前面
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
System.out.print(j+"*"+i+"="+(i*j)+"\t\t\t");
}
System.out.println();
}
System.out.println();
//下三角形式,小的数在前面
for(int i=1;i<=9;i++)
{
for(int j=1;j<=10-i;j++)
{
System.out.print(i+"*"+j+"="+(i*j)+"\t\t\t");
}
System.out.println();
}
}
}
for(int k:data){
System.out.println(k);
}
数组是一种容器,特殊容器
package javaclass;
import java.util.Scanner;
public class practice {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int i,x;
int sum=0;
int[] number = new int[100]; //创建数组,数组是一种容器
//int n=in.nextInt();//输入200
//double[] number = new double[n]; //n可以使变量,编译器检查不出下标越界运行时会抛出异常
//数组大小也可以用另一种形式用number.length来确定。令代码具有可扩展性的代码。
//int[] b=a;数组变量是管理者指针。两个管理者管理同一个地方。
/*
for(int k:data) //把data数组里每一个元素作为k,令其为循环的条件,适合遍历但缺少下标
{
if(k==x)
{
found=ture;
}
}
*/
//二维数组 int[][] number =new int[3][5];
//int[][] number2 ={{1,2},{3,4,5}};
x=in.nextInt();
for(i=0;x!=-1;i++)
{
number[i]=x;
sum=sum+number[i];
x=in.nextInt();
}
double ave;
ave=1.0*sum/i;
System.out.print(sum+","+ave);
in.close();
}
}
package com.htk.base;
public class Demo3 {
public static void main(String[] args) {
//分开写定义数组
int[] num;
num = new int[10];
//合并写定义数组
int[] num2 = new int[10];
}
}
内存分析
java内存
堆
栈
方法区
ArrayIndexOutOfBoundsException:数组下标异常
三种初始化
package com.htk.base;
public class Demo3 {
public static void main(String[] args) {
//静态初始化
int[] a={1,2,3};
//动态初始化
int[] b=new int[10];
//数组默认初始化,默认值为0
System.out.println(b[2]); //输出为0
}
}
package com.htk.base;
import java.util.Arrays;
public class Demo3 {
public static void main(String[] args) {
//静态初始化
int[] a={1,4,3,8,7,9,6,2};
System.out.println(Arrays.toString(a));
Arrays.sort(a);
System.out.println(Arrays.toString(a))
}
}
数组中大部分为0或同一个值时,可以使用稀疏数组赖堡村改数组
处理方法
练习:编写五子棋棋盘存盘和续盘
包裹类型:每个基础类型都有个对应的包裹类型
Boolean,Character,Integer,Double ,使用包裹类型可以调用一些方法获取信息
String
String是一个类
String s = new String("a string");
System.out.print(s.equals("a string")); //比较字符串用equals而不是==
String操作
方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
……
方法体
……
//return 返回值;
}
package com.htk.base;
public class Demo02 {
public static void main(String[] args) {
int max=max(10,10);
System.out.println(max);
}
public static int max(int a,int b){
if(a>b)
return a;
else
return b;
}
}
方法调用
调用方法:对象名.方法名(实参列表)
当方法返回一个值的时候,方法调用通常被当做一个值。
int max=max(20,100);
若方法返回值是void,方法调用一定是一条语句。
System.out.println("OK");
java都是值传递,不是引用传递
package com.htk.base;
public class Demo02 {
public static void main(String[] args) {
int max=max(10,10); //方法调用
double large=max(20.4,25.9);
System.out.println(max);
}
//方法定义
public static int max(int a,int b){
if(a>b)
return a;
else
return b;
}
//方法重载
public static double max(double a,double b){
if(a>b)
return a;
else
return b;
}
}
package com.htk.base;
public class Demo02 {
public static void main(String[] args) {
printMax(2,8,9,7,55,6,7,132,4,5);
printMax(new int[] {1,2,3,4,5});
}
//方法定义
public static void printMax(int...number){
if(number.length==0){
System.out.println("No argument passed");
return;
}
int max=number[0];
for(int i=0;i<number.length;i++)
if(max<number[i])
max=number[i];
System.out.println(max);
}
}