查看: 82|回复: 0

一天学好java第五章自译(输入输出)

[复制链接]

3

主题

10

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2023-7-17 12:43:58 | 显示全部楼层 |阅读模式
全书完整版地址(更新中):

第五章 程序交互

现在我们已经介绍了变量和数据类型的基础知识,让我们编写一个程序,它接受用户的输入,将数据存储在变量中,并向用户显示消息。毕竟,如果一个计算机程序不能与用户交互,它还有什么用呢?
5.1显示输出

我们已经在第2章和第4章中看到了一些向用户显示输出的例子。
简单地说,要向用户显示输出,可以使用Java提供的print()或println()方法。为了使用这些方法,我们必须添加System。在方法名前面。这是因为这两个方法属于PrintStream类,我们必须使用System。去找他们。如果现在听起来很混乱,不要担心。我们将在第7章学习更多关于类和方法的知识。
println()和print()方法之间的区别在于,println()在显示消息后将光标向下移动到下一行,而print()则不会。
例如,如果我们写
System.out.println("Hello");
System.out.println("How are you");我们将得到
Hello
How are you
如果我们写:
System.out.print("Hello");
System.out.print("How are you");我们将得到
HelloHow are you
除此之外,这两种方法是一样的。
让我们看几个例子,看看如何使用println()向用户显示消息。print()方法的工作方式完全相同。
显示简单的文本消息
为了显示一个简单的消息,我们写入
System.out.println("Hi, my name is Jamie.");输出为:
Hi, my name is Jamie.
显示变量的值
为了显示变量的值,我们将变量名作为参数传入。例如,假设我们有:
int number=30;
我们可以以如下方式输出它的值:
System.out.println(number);输出内容为:
30
注意,我们没有将变量名(数字)用双引号括起来。如果我们写
System.out.println(“number”);输出将是
number
显示非变量的运算结果
我们还可以使用println()方法直接显示数学表达式或方法的结果。例如,如果我们写
System.out.println(30+5);输出值为
35
要显示方法的结果,可以编写
System.out.println("Oracle".substring(1, 4));在这里,我们显示的是substring()方法的结果.输出为
rac
连接符号
接下来,让我们看几个例子,看看如何通过组合两个或多个较短的字符串来显示更复杂的字符串。为此,我们使用连接号(+)。
如,代码
System.out.println("Hello, " + "how are you?" + " I love Java.");我们将得到
Hello, how are you? I love Java.
要将字符串与变量连接起来,我们可以编写
int number=30;
System.out.println("The number is "+number);输出为:
The number is 30
最后,我们可以将字符串与数学表达式连接起来,如下所示:
System.out.println("The sum of 50+2 is "+(50+2)+".");输出为:
The sum of 50+2 is 52.
注意,在上面的例子中,我们在数学表达式50+2中添加了圆括号。这是为了迫使编译器在将结果与其他两个子字符串连接之前先计算表达式。当您将字符串与数学表达式连接时,强烈建议您这样做。如果不这样做,可能会导致错误。【译注:亲测如无括号输出为:”The  sum of 50+2 is 502.”,原因为括号外的+号被识别为连接符,将值50与值2连接而非识别为加号将两值相加】
5.2转义字符

接下来,让我们看看转义序列。有时在程序中,我们可能需要打印一些特殊的“不可打印”字符,如制表符或换行符。在这种情况下,您需要使用\(反斜杠)字符来转义具有不同含义的字符。
例如,要打印制表符,我们在字母t之前输入反斜杠字符,就像这样:\t。
如果没有\字符,则打印字母“t”。使用它,打印一个制表符。\t被称为转义序列。如果你输入
System.out.println("Hello\tworld");你将得到:
Hello world
其他常用的转义序列包括:
换行符\n
案例:
System.out.println("Hello\nworld");输出为:
Hello
world
打印斜杠\\
System.out.println("\\");输出
\
输出双引号(\"),使双引号不会结束字符串
案例:
System.out.println("\"\"");输出为:
""
5.3格式化输出(printf)

在前面的示例中,我们研究了如何使用println()和print()方法将输出显示给用户。但是,有时我们希望对输出的格式有更大的控制。例如,如果我们写
System.out.println("The answer for 5.45 divided by 3 is " +(5.45/3));输出为:
The answer for 5.45 divided by 3 is 1.8166666666666667
在大多数情况下,我们不希望向用户显示这么多小数点后的位置。在这种情况下,我们可以使用printf()方法将输出显示给用户。printf()方法比println()方法稍微复杂一些,但它对显示输出的方式提供了更多的控制。为了格式化上面的输出,我们可以写
System.out.printf("The answer for %.3f divided by %d is %.2f.\n",5.45, 3, 5.45/3);输出为:
The answer for 5.450 divided by 3 is 1.82.
printf()方法需要一个或多个参数。在上面的例子中,我们向方法传递了四个参数。
第一个参数是"The answer for %.3f divided by %d is %.2f."是被格式化的字符串
您可能会注意到字符串中有一些奇怪的符号:%.3f, %d和%.2f。这些被称为格式说明符。它们充当占位符,并被后面的实参所取代。第一个格式说明符(%.3f)替换为逗号后列表的第一个参数(5.45)第二个(%d)替换为第二个参数(3),以此类推。
格式说明符总是以百分号(%)开始,以转换类型 (如f或d)结束。它们指定替换它们的参数应该如何格式化。在百分号(%)和转换类型之间,可以添加称为标志的附加信息。
-在我们的例子中,第一个格式说明符是%.3f。
f是转换类型。它告诉编译器它应该被一个浮点数(即带有小数位的数字,如float或double)所取代。如果我们试图用一个非浮点数替换它,就会得到一个错误。
.3是一个标志.3是旗帜。它表示我们想要显示小数点后3位的数字。因此,数字5.45在回显中显示为5.450。除了%.3f说明符,在Java中还有很多其他的说明符。接下来的两节将讨论说明符中其他一些常用的转换类型和标志。
5.3.1转换类型

整型转换类型:d
%d用于格式化整数,如byte,short,int和long类型。

System.out.printf("%d",12);输出为
12.
换行转换符 n
这个换行符可实现换行
如:
System.out.printf("%d%n%d",12,3);输出为:
12
3
5.3.2 标志

宽度标志
此标志用于指定总宽度。
例1:
System.out.printf("%8d",12);输出为:
12
在上面的输出中,数字12前面有6个空格,总宽度为8。
例2:
System.out.printf("%8.2f", 12.4);输出:
12.40
在上面的输出中,数字前面有3个空格,使我们的总宽度为8,包括小数点。
千位分隔标志(,)
此标志用于显示带有千位分隔符的数字
例1:
System.out.printf("%,d", 12345);输出
12,345
例2
System.out.printf("%,.2f", 12345.56789);输出
12,345.57
5.4接受用户输入

现在我们知道了如何向用户显示输出,让我们看看如何接受来自用户的输入。接受输入实际上是相当简单的。有几种方法可以做到这一点,但最简单和最常见的方法是使用Scanner对象。
为了接受用户输入,我们需要首先使用下面的语句导入Scanner类:
import java.util.Scanner;接下来,我们需要创建一个http://System.in作为开始
http://System.in告诉编译器您想从标准输入设备(通常是键盘)获取输入。如果您是编程新手,您可能不理解对象是什么。不要担心这个;你将在第7章学习类和对象。现在,只需知道您需要编写下面的语句来接受来自用户的输入。
Scanner reader=new Scanner(System.in);Scanner类包含一些方法,我们可以使用它们从用户那里读取输入。常用的方法是nextInt(), nextDouble()和nextLine()分别用于读取int, double和String数据类型。

为了理解这些方法是如何工作的,让我们在创建一个新项目,并将其命名为InputDemo。如果你忘记了如何创建一个新项目,请参考第2.2章。将代码替换为以下代码:
1.import java.util.Scanner;
2.public class InputDemo {
3.    public static void main(String[] args) throws Exception {
4.        Scanner input=new Scanner(System.in);
5.         int myInt=input.nextInt();
6. System.out.print("请输入一个整数");
7.        System.out.printf("你输入的数字是%d.%n%n", myInt);
8.        System.out.print("请输入一个double型数据");
9.        double myDouble=input.nextDouble();
10.        System.out.printf("你输入的数字是%.2f%n%n",myDouble);
11.        System.out.print("请输入一个String型数据");
12.        input.nextLine();
13.        String myString=input.nextLine();
14.        System.out.printf("你输入的字符串是\"%s\"%n%n",myString);

    }
}在第1行,我们导入java.util.Scanner类。接下来,我们在第4行创建一个Scanner对象,并将其命名为input。在第6行,我们提示用户输入一个整数。然后使用nextInt   ()方法读取整数。最后在第7行,我们使用printf()方法显示用户的输入。从第8行到第10行,我们执行类似的操作,只不过我们提示用户输入一个double并使用nextDouble()方法读取输入。从第11行到第14行,我们提示用户输入一个字符串并使用nextLine()方法读取该字符串。
然而,您可能会注意到一些不同之处。在第12行,我们有一个
input.nextLine();换句话说,我们调用了nextLine()方法两次(在第12行和第38行)。这是必要的,因为第9行中的nextDouble()方法的工作原理。nextDouble()方法只读取一个double对象。但是,当用户输入一个数字时,用户将按Enter键。这个Enter键本质上是换行符(“\n”),并被nextDouble()方法忽略,因为它不是一个双字符。我们说nextDouble()方法不使用换行符。我们需要在第12行上使用nextLine()方法来吸收换行符。
如果您删除第12行并尝试再次运行程序,您将看到您将没有机会输入任何字符串。这是因为nextLine()方法使用前面的换行符。由于在此之后没有其他nextLine()语句,程序将不会等待用户的另一个输入。
无论何时在nextDouble()方法之后使用nextLine()方法,都应该有一个额外的nextLine()方法来使用之前的换行符。这同样适用于nextInt()方法。尝试运行这个程序,并在提示时输入一个整数、双精度和字符串。程序应该按预期运行。
除了上面提到的三个方法,Java还有nextByte(),nextShort(),  nextLong(), nextFloat () 和 nextBoolean()  方法的分别读取Byte、short、long、float和boolean类型的数据。这些方法都期望读入正确数据类型的值。在实例中,nextDouble()方法期望读入一个double类型。如果用户没有输入正确数据类型的值,这些方法将尝试将输入转换为正确的类型。如果失败,则该方法将导致错误。例如,如果nextDouble()方法读取了值20,它会将其转换为double。但是,如果它读入字符串“hello”,它将生成一个错误。我们将在下一章学习如何处理这些错误。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表