java学习总结4

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.

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值