[MOOC-Java]1.2.1用变量做计算

用变量做计算

获取输入

应声虫初级版

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自己用的,别人不能用。(不能被用作标识符)

标识符

你给杯子贴标签,标签是不能随便起名字的。

变量名也是一样。

Java语言的命名规范需遵守下面9个条件:

  1. 标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。
  2. 不能以数字开头不能是关键字
  3. 严格区分大小写
  4. 标识符的可以为任意长度
  5. 包名多个单词组成时所有字母小写(例:package helloworld)
  6. 类名和接口、多个单词组成时所有单词的首字母大写(例:HelloWorld)
  7. 变量名和函数名 多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:lastAccessTime、getTime)。
  8. 常量名 多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:INTEGER_CACHE) 注意:只是为了增加规范性、可读性而做的一种约定,标识符在定义的时候最好见名知意,提高代码阅读性。
  9. 虽然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();
        
    }

}

赋值操作

下一篇讲。

表达式

能返回一个值,

后面再讲。

原文地址:https://www.cnblogs.com/ShyButHandsome/p/13364223.html