java-包和输入输出


包和导入包

Java 中的类(Class)都被放在一个个包(package)里面。在一个包里面不允许有同名的类。在类的第一行通常要说明这个类是属于哪个包的。例如:

1
package org.oi-wiki.tutorial;

包的命名规范一般是:项目所有者的顶级域.项目所有者的二级域.项目名称

通过 import 关键字来导入不在本类所属的包下面的类。例如下面要用到的 Scanner

1
import java.util.Scanner;

如果想要导入某包下面所有的类,只需要把这个语句最后的分号前的类名换成 *

输入

1
2
3
4
5
6
7
8
9
10
11
package org.oiwiki.tutorial; 
import java.util.Scanner;
class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// System.in 是输入流
int a = scan.nextInt();
double b = scan.nextDouble();
String c = scan.nextLine();
}
}

可以看到java的输入和输出是不一样的

  1. System.in vs scanf:

    • System.in: 在Java中,System.in 是一个字节流(InputStream),它用于读取字节数据,而不是像 scanf 一样直接处理格式化的输入。因此,处理用户输入时,通常需要使用其他类(比如 Scanner 或者 BufferedReader)来将字节流转换为更易处理的形式(比如文本或者基本数据类型)。
    • scanf: 在C语言中,scanf 是一个函数,它能够按照指定的格式从标准输入(通常是键盘)读取数据,并且可以将数据格式化为不同的数据类型(整数、浮点数、字符串等)。scanf 的格式化字符串允许精确地指定输入数据的格式,这使得它在处理格式化输入时非常方便。
  2. Java的输入方式:

    • 在Java中,虽然没有像 scanf 那样直接的格式化输入函数,但是有几种方式可以实现类似的功能:
      • 使用 Scanner 类:Scanner 类可以从 System.in 中读取数据,并且提供了各种方法来解析不同数据类型(如整数、浮点数、字符串)。
      • 使用 BufferedReader 和 InputStreamReader:这些类可以用于读取字符流,并且可以进行高效的文本处理,尤其适合处理大量输入。
      • 使用 Console 类:Java 6 引入了 Console 类,它提供了一些基本的输入方法,但它的功能相对有限。
scanner

当你需要从用户输入数据时,Java中的 Scanner 类是一个非常常用且方便的工具。它可以帮助你从各种输入源(如 System.in,文件等)中读取数据,并且支持不同的数据类型。

使用Scanner类进行输入

  1. 导入Scanner类: 在使用之前,首先需要导入 java.util.Scanner 包,因为 Scanner 类位于 java.util 包中。

    javaCopy Code

    import java.util.Scanner;

  2. 创建Scanner对象: 使用 Scanner 类来处理输入。通常,你会创建一个 Scanner 对象,并将其与特定的输入流(例如 System.in)相关联。

    javaCopy Code

    Scanner scanner = new Scanner(System.in);

    这样就创建了一个可以从标准输入(通常是键盘)读取数据的 Scanner 对象。

  3. 读取不同类型的输入Scanner 类提供了多种方法来读取不同类型的数据。以下是一些常用的方法:

    • nextInt():读取一个整数。
    • nextDouble():读取一个双精度浮点数。
    • next():读取一个字符串,遇到空格或换行符停止。
    • nextLine():读取一行输入,包括空格,直到换行符为止。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("你输入的整数是:" + num);
System.out.print("请输入一个双精度浮点数:");
double doubleNum = scanner.nextDouble();
System.out.println("你输入的双精度浮点数是:" + doubleNum);
System.out.print("请输入一个字符串:");
String str = scanner.next();
System.out.println("你输入的字符串是:" + str);
System.out.print("请输入一行文本:");
scanner.nextLine(); // 清空输入缓冲区
String line = scanner.nextLine();
System.out.println("你输入的文本是:" + line);
scanner.close(); // 关闭输入流
}
}

java输入和输出

假设输入是:

1
Hello World  Another Line

如果先调用 scanner.next(),它会返回 "Hello",并留下 " World\nAnother Line" 在输入中。紧接着调用 scanner.nextLine() 会返回 " World"(注意,没有换行符)。

如果先调用 scanner.nextLine(),它会返回 "Hello World"(包括空格但不包括换行符),紧接着调用 scanner.nextLine() 会返回 "Another Line"

**注意**:

- 在读取完整行文本之前,可能需要调用 `scanner.nextLine()` 来清除输入缓冲区。
- 使用完 `Scanner` 后,最好调用 `scanner.close()` 来释放资源,尤其是在程序结束时。

Scanner的灵活性与限制

  • 灵活性Scanner 类提供了丰富的方法来处理各种类型的输入数据,可以满足大多数基本的输入需求。
  • 限制:对于复杂的输入处理(如格式化的输入),可能需要额外的逻辑来处理或者考虑使用其他输入方法(如 BufferedReader)。

通过熟悉 Scanner 类及其方法,你可以有效地处理用户输入,并在程序中进行相应的逻辑操作和处理。

输出

可以对变量进行格式化输出。

符号 意义
%f 浮点类型
%s 字符串类型
%d 整数类型
%c 字符类型
1
2
3
4
5
6
7
8
9
10
11
12
class Test { 
public static void main(String[] args) {
int a = 12;
char b = 'A';
double s = 3.14;
String str = "Hello world";
System.out.printf("%f\n", s);
System.out.printf("%d\n", a);
System.out.printf("%c\n", b);
System.out.printf("%s\n", str);
}
}

文章作者: K1T0
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 K1T0 !
  目录