刷题DAY19
打印数字图案
题目:从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形
输入:正整数n(1≤n≤9)
输出:指定数字图形
输入:5
输出:
1
121 12321 1234321 123454321 1234321 12321 121 1
import javax.swing.*; import java.lang.Math; import java.util.Scanner; public class 打印数字图形{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int i, j, k; for (i = 0; i < 2*n-1; i++){ k = 0; if (i < n){ for (j = 0; j < n+i; j++){ if (j < n-i-1){ System.out.printf(" "); } else if(j >= n-i-1&&j < n){ k++; System.out.printf("%d", k); } else{ k--; System.out.printf("%d", k); } } System.out.printf("\n"); } else{ for (j = 0; j < 3*n-i-2; j++){ if (j < i-n+1){ System.out.printf(" "); } else if (j >= i-n+1 && j < n){ k++; System.out.printf("%d", k); } else{ k--; System.out.printf("%d", k); } } System.out.printf("\n"); } } } }
知识点
占位符
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。
format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。
显示不同转换符实现不同数据类型到字符串的转换,如图所示。
转 换 符 | 说 明 | 示 例 |
---|---|---|
%s | 字符串类型 | "mingrisoft" |
%c | 字符类型 | 'm' |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 99 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 99.99 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型(f和e类型中较短的) | |
%h | 散列码 | |
%% | 百分比类型 | % |
%n | 换行符 | |
%tx | 日期与时间类型(x代表不同的日期与时间转换符) |
示例:
public static void main(String[] args) { String str=null; str=String.format("Hi,%s", "小郑"); System.out.println(str); str=String.format("Hi,%s:%s.%s", "小登","中登","老登"); System.out.println(str); System.out.printf("字母a的大写是:%c %n", 'A'); System.out.printf("3>7的结果是:%b %n", 3>7); System.out.printf("100的一半是:%d %n", 100/2); System.out.printf("100的16进制数是:%x %n", 100); System.out.printf("100的8进制数是:%o %n", 100); System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85); System.out.printf("上面价格的16进制数是:%a %n", 50*0.85); System.out.printf("上面价格的指数表示:%e %n", 50*0.85); System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85); System.out.printf("上面的折扣是%d%% %n", 85); System.out.printf("字母A的散列码是:%h %n", 'A'); }
输出结果:
Hi,小郑 Hi,小登:中登.老登 字母a的大写是:A 3>7的结果是:false 100的一半是:50 100的16进制数是:64 100的8进制数是:144 50元的书打8.5折扣是:42.500000 元 上面价格的16进制数是:0x1.54p5 上面价格的指数表示:4.250000e+01 上面价格的指数和浮点数结果的长度较短的是:42.5000 上面的折扣是85% 字母A的散列码是:41
println和print
printf是一个格式化输出方法,它以指定的格式输出指定的信息。它类似于C语言中的printf,在Java中,你可以使用“%”转换符指定要在输出中包含的变量值。下面是一个简单的示例:
System.out.printf("My name is %s and my age is %d", "Bob", 25);
输出: My name is Bob and my age is 25
在这个示例中,“%s”和“%d”是转换符,表示字符串和整数变量,他们按顺序插入到字符串中。
当你使用printf时,你可以使用转换符将不同类型的变量插入到输出字符串中
println是一个输出方法,它将指定的信息打印到控制台,并在结尾处换行。它不适用于格式化输出,如下面的示例:
System.out.println("My name is Bob"); System.out.println("My age is 25");
输出: My name is Bob My age is 25
println方法只需要将指定的信息打印到控制台并换行。它可以接受一个或多个参数,并将它们打印到控制台
printf方法可以让你在控制台上实现更复杂的输出格式,比如对齐、填充等。你可以使用下面的转换符指定一个字段宽度和一个填充字符,这样就可以对齐输出:
-
%10s - 字符串类型,字段宽度为10
-
%-10s - 字符串类型,字段宽度为10,左对齐
-
%03d - 整数类型,字段宽度为3,不足3位的用0填充
另一个区别是printf方法可以输出到一个文件中,而println方法只能输出到控制台。你可以使用PrintWriter类将输出重定向到文件中,像这样:
PrintWriter out = new PrintWriter(new FileWriter("output.txt")); out.printf("My name is %s and my age is %d", "Bob", 25); out.close();
这将把输出写入到名为“output.txt”的文件中,而不是控制台。
因此,printf和println分别适用于不同的输出需求。如果你需要格式化你的输出,那么使用printf方法,如果你只需要简单的输出文本并换行,那么使用println方法。printf和println都是Java中常见的输出方法,用于在控制台输出文本。printf适用于更复杂的输出,可以实现对齐和填充等功能。println则适用于简单的输出,只需要打印一行文本并换行即可。
单词统计
题目:从键盘输入一行字符,统计其中单词的个数,各单词以空格分隔,且空格数可以是多个
输入:输入只有一行句子。仅有空格和英文字母构成,不超过100个字符
输出:单词的个数
输入:stable marriage problem Consists of Matching members
输出:7
import java.util.Scanner; public class 单词统计 { public static void main(String[] args) { // 创建一个Scanner对象以接收用户输入 Scanner scanner = new Scanner(System.in); // 读取一行输入 String input = scanner.nextLine(); // 初始化单词计数器 int count = 0; // 用于标记当前是否在单词中 boolean inWord = false; // 遍历输入字符串的每个字符 for (int i = 0; i < input.length(); i++) { // 获取当前字符 char ch = input.charAt(i); // 如果当前字符是字母或数字 if (Character.isLetterOrDigit(ch)) { // 如果不在单词中,则增加单词计数器 if (!inWord) { count++; // 标记为当前处于单词中 inWord = true; } } else { // 如果当前字符不是字母或数字,则标记为不在单词中 inWord = false; } } // 打印单词计数器的值,即输入字符串中的单词数目 System.out.println(count); } }
知识点
Character.isLetterOrDigit()
是Java中的一个字符方法,它用于检查给定的单个Unicode字符是否为字母(大写或小写字母)或者是数字。
这个方法对于处理用户输入、验证字符串格式或者做简单的文本处理非常有用,比如判断某个字符是否适合用于拼接成一个有效的标识符
java.lang.Character.isLetterOrDigit(char ch) 这个方法确定指定的字符是否为字母或数字。字符被认为是字母或数字,如果字符是字母或数字则此方法返回true,否则为false。