目录
7-1 sdut-sel-2 汽车超速罚款(选择结构) (10 分)
Integer.parseInt(s)与Integer.valueOf(s)的区别:
1、append(String str)/append(Char c):字符串连接
2、toString():返回一个与构建起或缓冲器内容相同的字符串
3、appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
4、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
5、insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
6、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
7-1 sdut-sel-2 汽车超速罚款(选择结构) (10 分)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int speedLimit,speed,fine;
speedLimit=sc.nextInt();
speed=sc.nextInt();
if(speed<=speedLimit)
System.out.println("Congratulations, you are within the speed limit!");
else if(speed-speedLimit>=1 && speed-speedLimit<=20)
System.out.println("You are speeding and your fine is 100.");
else if(speed-speedLimit>=21 && speed-speedLimit<=30)
System.out.println("You are speeding and your fine is 270.");
else
System.out.println("You are speeding and your fine is 500.");
}
}
基础问题
7-2 Java中二进制位运算 (10 分)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String []arr = str.split("\\s+");
int num1 = Integer.parseInt(arr[0]);
int num2 = Integer.parseInt(arr[2]);
switch(arr[1]) {
case "&":
System.out.println(num1 + " & " + num2 + " = " + (num1&num2));
break;
case "|":
System.out.println(num1 + " | " + num2 + " = " + (num1|num2));
break;
case "^":
System.out.println(num1 + " ^ " + num2 + " = " + (num1^num2));
break;
default:
System.out.println("ERROR");
break;
}
}
}
数组的创建
split() 方法用于把一个字符串分割成字符串数组。
\\s+ 是以空格为间隔,读取数组元素
Integer.parseInt(s)用法:
Integer.parseInt(s)的作用就是把字符串s解析成有符号的int基本类型。
Integer.valueOf(s)用法:
Integer.valueOf(s)把字符串s解析成Integer对象类型,返回的integer 可以调用对象中的方法。
Integer.parseInt(s)与Integer.valueOf(s)的区别:
Integer.parseInt(s)
Integer.parseInt(s)多次解析同一个字符串得到的int基本类型数据是相等的,可以直接通过“==”进行判断是否相等。
int是基本类型,不含有equals方法,所以只能用“==”比较,基本类型用“==”比较的是两个值的大小。Integer.valueOf(s)
Integer.valueOf(s)多次解析相同的一个字符串时,得到的是Integer类型的对象,得到的对象有时是同一个对象,有时是不同的对象,要根据把s字符串解析的整数值的大小进行决定:如果s字符串对应的整数值在 -128~127之间,则解析出的Integer类型的对象是同一个对象;如果s字符串对应的整数值不在-128~127之间,则解析出的Integer类型的对象不是同一个对象。不管对象是否相等,对象中的value值是相等的。nextLine读取缓冲区中的一行字符串
7-3 sdut-最大公约数和最小公倍数 (10 分)
给定2个正整数,求它们的最大公约数和最小公倍数,并输出。
输入格式:
输入有若干组。
每组数据,在一行中给出两个正整数M和N(≤1000),中间有1个空格。
输出格式:
对于每组输入,在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1个空格分隔。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(yueshu(a,b)+" " +beishu(a,b));
}
}
public static int yueshu(int a,int b) {
int temp = 0;
if(a<b)
{
temp = a;
a = b;
b = temp;
}
while(b!=0) {
temp = a%b;
a = b;
b = temp;
}
return a;
}
public static int beishu(int a,int b)
{
int temp;
temp = yueshu(a,b);
return a*b/temp;
}
}
求约数和倍数
hasNextInt()
'hashNextInt'表示下一个输入是否可以安全地读为'int',所以在你试图读取一个不是'int'的错误之前调用它才有意义。
总结
- 用hasNextInt()作为判断下一个输入是否为数字需要配合nextInt()方法使用
- 需要注意的是:在使用hasNextInt()方法时,一般判断语句if或循环语句while在前,输入数据在后,以起到先判断数据是否为整型,后执行代码的作用。
7-4 判断回文 (10 分)
// package cn.ssdut.output;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
System.out.println(GetLength(n));
JudgeHuiWen(n);
scanner.close();
}
public static int GetLength(int ss)
{
int i=0,j=0;
for(i=0;i<ss;ss/=10)
{
if(ss>0)
j++;
}
return j;
}
public static boolean JudgeHuiWen(int ss)
{
String a = "";
a = ss +"";
StringBuffer n = new StringBuffer(a);
n.reverse();
int i,sum=0;
for(i=0;i<a.length();i++)
{
if(a.charAt(i) == n.charAt(i))
sum++;
}
if(sum == a.length())
{
System.out.println("Y");
return true;
}
else
{
System.out.println("N");
return false;
}
}
}
StringBuffer()的基本使用
对字符串进行拼接操作。
1.StringBuffer和String的区别?
前者长度和内容可变,后者不可变。
2. StringBuffer的构造方法:
- public StringBuffer():无参构造方法
- public StringBuffer(int capacity):指定容量的字符串缓冲区对象
- *public StringBuffer(String str)指定字符串内容的字符串缓冲区对象
3.StringBuffer()的方法:
- public int Capacity();返回当前容量 理论值
- public int length() 返回长度(字符数) 实际值
4.StringBuffer的添加功能:
- * public StringBuffer append(String str)
* 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
- * public StringBuffer insert(int offset,String str)
* 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
5.StringBuffer的删除功能:
- public StringBuffer deleteCharAt(int index)
删除指定位置字符,并返回本身
- public StringBuffer delete(int start,int end)
删除从指定位置开始,并从指定位置结束字符,并返回本身
注:包左不包右6.StringBuffer的截取功能:
注意返回值类型不是StringBuffer
- public String substring(int start)
- public String substring(int start,int end)
7.StringBuffer的替换功能:
public StringBuffer replace(int start,int end,String str),从start到end用str替换8.StringBuffer的反转功能:
public StringBuffer reverse()
7-5 字符串操作 (15 分)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
StringBuilder stringBuilder = new StringBuilder(s.replaceAll("\\d+",""));
System.out.println(stringBuilder.reverse().toString());
}
}
StringBuilder的常用方法
在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生,下面就Stringbuilder的使用做个简要的总结:
一、创建Stringbuilder对象
StringBuilder strB = new StringBuilder();1、append(String str)/append(Char c):字符串连接
System.out.println("StringBuilder:"+strB.append("ch").append("111").append('c'));2、toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println("String:"+strB.toString());3、appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
System.out.println("StringBuilder.appendCodePoint:"+strB.appendCodePoint(2));4、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, 'd');
System.out.println("StringBuilder.setCharAt:" + strB);5、insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
System.out.println("StringBuilder.insertString:"+ strB.insert(2, "LS"));
System.out.println("StringBuilder.insertChar:"+ strB.insert(2, 'L'));6、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println("StringBuilder.delete:"+ strB.delete(2, 4));7.StringBuilder的reverse()方法:
用于反转StringBuilder中的字符。
该方法有助于将此字符序列替换为相反的序列。
返回值:反转字符后,此方法返回StringBuilder对象。
7-6 N个数的排序与查 (10 分)
从键盘输入N个整数,并输出指定的某个整数在这N个整数中的按照由小到大的顺序排列的位次(最小的位次是1,最大的位次是N,指定的整数如果不在这N个数中,则其位次是-1)
//package cn.ssdut.output;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int nums[] = new int[n];
int i;
for(i=0;i<n;i++)
{
nums[i] = sc.nextInt();
}
int temp,j;
for(i=0;i<n-1;i++)
{
for(j=i;j<n;j++)
{
if(nums[i] > nums[j])
{
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
int m = sc.nextInt();
int x = n+1;
for(i=0;i<n;i++)
{
if(nums[i] == m)
{
x = i;
}
}
if(x<=n)
{
System.out.println(x+1);
}
else {
System.out.println(-1);
}
}
}
7-7 二进制的前导的零 (15 分)
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
Integer a = scanner.nextInt();
if (a == 0){
System.out.println(32);
}else {
String s = Integer.toBinaryString(a);
System.out.println(32 - s.length());
}
}
}
Integer类中有静态方法:
toBinaryString(int i):返回int变量的二进制表示的字符串。
toHexString(int i):返回int变量的16进制字符串。
toOctalString(int i):返回int变量的8进制表示字符串。