用变量做计算
获取输入
应声虫初级版
package hello;
// 导入Scanner
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
// 这里构建了一个Scanner对象in
Scanner in = new Scanner(System.in);
// 使用in.nextLine()来读取整行
System.out.println(in.nextLine());
// 记得将in给close
in.close();
// 输入:Nice to meet you
// 输出:Nice to meet you
}
}
应声虫升级版
Tips: '+' 号可以起到连接两个字符串的作用
package hello;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
System.out.print("Input: ");
Scanner in = new Scanner(System.in);
// 使用 '+' 号连接
System.out.println("Output: " + in.nextLine());
in.close();
}
}
注意'+'号优先级
例子:
package hello;
public class Hello {
public static void main(String[] args) {
System.out.println(2 + 3 + " = 2 + 3 = " + 2 + 3);
// 输出结果: 5 = 2 + 3 = 23
}
}
找零计算器
情景导入:你在和你的朋友做价值23元的py(朋友)交易,朋友给了你100元,你应该找回多少钱?
package hello;
public class Hello {
public static void main(String[] args) {
// 由于优先级的问题,需要加上()
System.out.println( "100 - 23" + (100 - 23) );
}
}
情景改变:朋友觉得你这明码标价不够意思,所以准备还价,一会儿他还是给你100块钱,但价钱他来定,你一会你要找给他多杀钱?
你知道朋友肯定不会为难你,还是会叫价23元,所以你这么找钱:
package hello;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("100 - 23 = " + (100 - in.nextInt()));
in.close();
// 输入: 23
// 输出: 100 - 23 = 77
}
}
看上去没有问题!
但万万没有想到的是,朋友居然不按套路出牌!
package hello;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("100 - 23 = " + (100 - in.nextInt()));
in.close();
// 输入: 33
// 输出: 100 - 23 = 63
}
}
?!怎么有个23没变,来,让我用in.nextInt()
把它换掉!
package hello;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("100 - " + in.nextInt() + " = " + (100 - in.nextInt()));
in.close();
// 输入: 33(回车,没反应?再来)
// 输入: 33(第二次)
// 输出: 100 - 33 = 67
}
}
太棒了,我解决了!就是这破电脑居然在我输入的时候卡了(指输入两次)!
哦?卡了?你再试试,输入两个不同的数字。
是不是发现结果不是你的预期了?
嘿嘿!这是因为你每次nextInt()
都会读取一个新的数字。
所以要达到我们只读取一次又要反复使用的目的,
就要请出我们的主角了————变量!
变量
我们的这里的变量和数学中的xyz
是很像的,
可以理解为拿个盒子装一件东西,然后在盒子上贴一个标签。
给你们看看使用变量的解决方案:
找零计算器Fixed版
package hello;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 看下面这条语句
int price = in.nextInt();
System.out.println( "100 - " + price + " = " + (100 - price) );
in.close();
}
}
int price = in.nextInt()
这条语句时什么意思呢?
你现在暂且理解为从小溪中用杯子舀起一杯水,然后给这个杯子贴上标签就可以了。
以后你只要告诉别人这个标签名,别人就知道该去哪里找到这杯水了。
System.out.println( "100 - " + price + " = " + (100 - price) );
这条语句就根据标签名(price
)找到了杯子中的水(读取的整数)。
我们再来看到这条语句:
int price = in.nextInt()
我们可以把它分为四个部分:
int
(变量类型,关键字)price
(变量名, 标识符)=
(赋值,不是等于)in.nextInt()
(price
的值,表达式)
<变量类型> <变量名> = <变量值>
像这样声明一个变量后我们就能(反复)使用了,
赋值操作倒是可以放在后面来做,
不过没有赋值的变量的值是不确定的,
所以建议在声明变量时对其同时赋值(哪怕是赋个0)(也称作初始化)。
我们后面会再用一篇讲赋值。
注意:Java是强类型语言,所以变量必须声明后再使用。
关键字(有时也称为保留字)
不用刻意记。
推荐阅读(如果看的懂的话):Java 关键字总结 - @YalesonChan
有:
这些单词是Java自己用的,别人不能用。(不能被用作标识符)
标识符
你给杯子贴标签,标签是不能随便起名字的。
变量名也是一样。
Java语言的命名规范需遵守下面9个条件:
- 标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。
- 不能以数字开头,不能是关键字
- 严格区分大小写
- 标识符的可以为任意长度
- 包名多个单词组成时所有字母小写(例:package helloworld)
- 类名和接口、多个单词组成时所有单词的首字母大写(例:HelloWorld)
- 变量名和函数名 多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:lastAccessTime、getTime)。
- 常量名 多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:INTEGER_CACHE) 注意:只是为了增加规范性、可读性而做的一种约定,标识符在定义的时候最好见名知意,提高代码阅读性。
- 虽然Java取消了goto,const这些关键字,但不能用来作为标识符使用。
这九条是规范,粗体是必须遵守的。
你甚至可以使用中文做你的标识符:
推荐阅读: 对在代码中使用中文命名标识符的质疑与回应 -掘金@中文编程
package hello;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 我不推荐这样做,无论是从更长远的考虑,还是程序本身。
int 价钱 = in.nextInt();
System.out.println( "100 - " + 价钱 + " = " + (100 - 价钱) );
in.close();
}
}
赋值操作
下一篇讲。
表达式
能返回一个值,
后面再讲。