目录
方法之间来回调用???
1.正常调用
public class Person {
public String name;
public int age;
public Person() {
System.out.println("我是人类构造方法");
}
public void eat(){
this.sleep();
System.out.println("我是人类吃饭方法");
}
public void sleep(){
System.out.println("我是人类睡觉方法");
// this.eat();
}
}
public class Test {
public static void main(String[] args){
Person p = new Person();
p.eat();
}
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe "...
我是人类构造方法
我是人类睡觉方法
我是人类吃饭方法
2.内存溢出
public class Person {
public String name;
public int age;
public Person() {
System.out.println("我是人类构造方法");
}
public void eat(){
this.sleep();
System.out.println("我是人类吃饭方法");
}
public void sleep(){
System.out.println("我是人类睡觉方法");
// this.eat();
}
}
public class Test {
public static void main(String[] args){
Person p = new Person();
p.eat();
}
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:77)
at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:564)
at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:619)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:561)
知识补充Scanner
现在看两个小程序
1.正常情况下
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args){
//利用数组实现用户的登录
//1.小数组来充当数据库
//2.利用Scanner让用户输入
Scanner input = new Scanner(System.in);
System.out.println("请输入账号:");
String name = input.nextLine(); //阻塞效果
//input这个小人在消息队列内等着读取
System.out.println("请输入密码:");
int password = input.nextInt(); //阻塞效果
//3.比较
System.out.println("接收到了账号名:" + name);
System.out.println("接收到了密码:" + password);
}
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入账号:
玫瑰
请输入密码:
123
接收到了账号名:玫瑰
接收到了密码:123
2.交换顺序后
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args){
//利用数组实现用户的登录
//1.小数组来充当数据库
//2.利用Scanner让用户输入
Scanner input = new Scanner(System.in);
//input这个小人在消息队列内等着读取
System.out.println("请输入密码:");
int password = input.nextInt(); //阻塞效果
System.out.println("请输入账号:");
String name = input.nextLine(); //阻塞效果
//3.比较
System.out.println("接收到了账号名:" + name);
System.out.println("接收到了密码:" + password);
}
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入密码:
123
请输入账号:
接收到了账号名:
接收到了密码:123
发生原因
解决方法
最好用第三个方法
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args){
//利用数组实现用户的登录
//1.小数组来充当数据库
//2.利用Scanner让用户输入
Scanner input = new Scanner(System.in);
//input这个小人在消息队列内等着读取
System.out.println("请输入密码:");
String password = input.nextLine(); //阻塞效果
//1.利用nextLine方法读取回车符
//input.nextLine();
//2.利用next方法读取字符串 next与nextInt不一样 不读取回车符
//3.将账号和密码都统一用nextLine来读取
// 出现问题:
// String--->int
// int-->String 5+"5"
// 数据类型转化问题 前提同种大数据类型一致 基本-基本 引用-引用
// 基本<-包装类->引用 int-Integer char-Character byte-Byte float-Float
int value = Integer.parseInt(password);
System.out.println("请输入账号:");
String name = input.nextLine(); //阻塞效果
//3.比较
System.out.println("接收到了账号名:" + name);
System.out.println("接收到了密码:" + value);
System.out.println(5+5+"5"+5+5);
}
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入密码:
123
请输入账号:
哈哈哈
接收到了账号名:哈哈哈
接收到了密码:123
10555
模拟计算器
import java.util.Scanner;
public class Calculator {
//设计一个方法 加法运算 是否需要提供条件 条件 两个元素 是否需要结果 计算结果
public float add(float a,float b){
return a+b;
}
//设计一个方法 减法运算
public float substact(float a,float b){
return a-b;
}
//设计一个方法 乘法运算
public float multiply(float a,float b){
return a*b;
}
//设计一个方法 除法运算
public float divide(float a,float b){
return a/b;
}
//设计一个方法 控制计算器计算流程
public void calculate() {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数字:");
String one = input.nextLine();
//String -->float Float
float a = Float.parseFloat(one);//可能会产生NumberFormatException
//需要一个死循环 while(true){} for(:;){}
while (true) {
System.out.println("请输入符号:");
String symbol = input.nextLine(); // + - * /
if(symbol.equals("=")){
System.out.println("执行完毕");
break;
}
if(!(symbol.equals("+")||symbol.equals("-")||symbol.equals("*")||symbol.equals("/"))){
System.out.println("输入符号有误,只能是[ = - * /]其中一个");
continue;
}
System.out.println("请输入第二个数字:");
String two = input.nextLine();
//String -->float Float
float b = Float.parseFloat(two);
switch (symbol) {
case "+":
a = this.add(a, b);
break;
case "-":
a = this.substact(a, b);
break;
case "*":
a = this.multiply(a, b);
break;
case "/":
a = this.divide(a, b);
break;
}
System.out.println(a);
}
}
}
public class Test {
public static void main(String[] args){
Calculator c = new Calculator();
c.calculate();
}
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入第一个数字:
1
请输入符号:
+
请输入第二个数字:
2
3.0
请输入符号:
&
输入符号有误,只能是[ = - * /]其中一个
请输入符号:
/
请输入第二个数字:
5
0.6
请输入符号:
=
执行完毕