60.带参输出
参数分两部分:要输出的内容%s(占位),填充的数据
System.out.printf(“%s %s”,”张三”,”李四”);
(要换行则加上System.out.println();)
61.键盘录入
第一套体系:
- nextInt();接收整数
- nextDouble();接收小数
- next();接收字符串
遇到空格,制表符,回车就停止接受。这些符号后面的数据就不会接受了。
第二套体系:
- nextLine();接收字符串
可以接收空格,制表符,遇到回车才停止接受数据
键盘录入的两套体系不能混用。
弊端:先用nextInt,再用nextLine会导致下面的nextLine接受不到数据
编写时数据能不写死,尽量不写死,即尽量多使用变量。
62.API
应用程序编程接口,即别人已经写好的东西,不需要自己编写,直接使用即可。
Java API:指的就是JDK中提供的各种功能的Java类,这些类将底层的实现封装了起来,需要学习使用这些类。
API帮助文档:用于使用和查询API(最常用的包为java.lang)
- 打开API帮助文档;
- 点击显示,并找到索引下面的输入;
- 在输入框中输入类名并点击显示;
- 查看类所在的包;
- 查看类的描述;
- 查看构造方法;
- 查看成员方法。
63.String
String是Java定义好的一个类,定义在java.lang包中,所以使用的时候不需要导包;
Java程序中的所有字符串文字(例如“abcdefg”),都被视为此类的对象;
字符串不可变,它们的值在创建后不能被更改。
64.创建String对象的两种方式
直接赋值:String name ="罗小黑";
new:
- public String():创建空白字符串,不含任何内容
- public String(String original):根据传入的字符串,创建字符串对象
- public String(char[] chs):根据字符数组,创建字符串对象(可通过修改字符数组的内容来修改字符串的内容)
- public String(byte[] chs):根据字节数组,创建字符串对象(应用:网络中传输的数据其实都是字节信息,需要把字节信息转换为字符串)
65.字符串的内存模型
StringTable:字符串常量池,简称串池,位于方法区或堆内存。
当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在,不存在则创建新的,存在则复用,即将同一个地址再次赋给变量。
66.==比较规则
- 基本数据类型比较的是数据值;
- 引用数据类型比较的是地址值。
67.字符串比较
- boolean equals(要比较的字符串):完全一样结果才是true,否则为false;
- boolean equalslgnoreCase(要比较的字符串):忽略大小写的比较。
总结:以后只要想比较字符串的内容,就必须要用String里面的方法。
格式:if(username.equals(rightUsername))
68.循环快捷键
选中代码,Ctrl+alt+t
69.遍历字符串
- public char charAt(int index):根据索引返回字符
- public int length():返回此字符串的长度
- 数组的长度:数组名.length
- 字符串的长度:字符串对象.length()
- 获取字符格式:char c = str.charAt(i);
char类型的变量在参与计算的时候自动类型提升为int,查询ascii码表,故统计大小写字母和常数个数时直接与字符比较即可:
if(c >= 'a' && c <= 'z'){
smallCount++;
}else if(c >= 'A' && c <= 'Z'){
bigCount++;
}else if(c >= '0' && c <= '9'){
numberCount++;
}
倒序遍历:str.length().forr
70.查表法
eg.定义数组,让数字跟大写的中文产生一个对应关系
public static String getCapitalNumber(int number){
String[] arr ={"零","壹","贰”, "叁","肆", "伍","陆", "柒","捌","玖"};
return arr[number];
}
题解
1.给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和(i, height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。
int maxArea(int *height, int heightSize) {
int max=0,left=0,right=heightSize-1,min_h=0;
while(left<right) {
if(height[left]<=height[right])
min_h=height[left];
else
min_h=height[right];
int area=(right-left)*min_h;
max=area>max?area:max;
if(height[left]<=height[right])
left++;
else
right--;
}
return max;
}
使用两个指针left和right从数组的两端开始向中间遍历。在每次迭代中,计算left和right之间的最小高度min_h,并计算当前左右指针之间的矩形面积,更新max为area和max中的较大值。如果height[left]小于等于height[right],则左指针向右移动一位(因为当前的最小高度已经由左指针确定,尝试通过向右移动来寻找更大的矩形);否则,右指针向左移动一位。
2.七个不同的符号代表罗马数字,其值如下:
符号 值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则:
- 如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。
- 如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。
- 只有 10 的次方(I, X, C, M)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要将符号附加4次,请使用 减法形式。
给定一个整数,将其转换为罗马数字。
const int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
const char* symbols[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
char* intToRoman(int num) {
char* roman=malloc(sizeof(char)*16);
roman[0]='\0';
for(int i=0;i<13;i++) {
while(num>=values[i]) {
num-=values[i];
strcpy(roman+strlen(roman),symbols[i]);
}
if(num==0) {
break;
}
}
return roman;
}
在数组中列出罗马数字本身及其减法形式,遍历数组,寻找不超过num的最大符号值,将num减去该符号值,并将该符号拼接在上一个找到的符号之后,循环直至num为0。最后得到的字符串即为num的罗马数字表示。
3.罗马数字包含以下七种字符: I,V,X,L,C,D和M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如,罗马数字2写做II,即为两个并列的1。12写做XII,即为X + II。27写做XXVII,即为XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。
int romanToInt(char* s) {
int count=0;
while(*s) {
if(*s=='V')
count+=5;
else if(*s=='L')
count+=50;
else if(*s=='D')
count+=500;
else if(*s=='M')
count+=1000;
else if(*s=='I')
count=(*(s+1)=='V'||*(s+1)=='X')?count-1:count+1;
else if(*s=='X')
count=(*(s+1)=='L'||*(s+1)=='C')?count-10:count+10;
else
count=(*(s+1)=='D'||*(s+1)=='M')?count-100:count+100;
s++;
}
return count;
}
根据题目可得,若当前位置上的罗马数字为V,L,D,M,则分别加上对应的整数5,50,500,1000,有三种特殊情况,若当前位置上的罗马数字为I,且下一位为V或X,则减1,否则加1;若当前位置上的罗马数字为X,且下一位为L或C,则减10,否则加10;若当前位置上的罗马数字为C,且下一位为D或M,则减100,否则加100.