🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!欢迎志同道合的朋友一起加油喔🤺🤺🤺
目录
一、选择题
二、编程题
🔥统计回文
🔥连续最大和
一、选择题
1、下面的程序 编译运行后,在屏幕上显示的结果是()
public class Test {
public static void main(String args[]) {
int x, y;
x = 5 >> 2;
y = x >>> 2;
System.out.println(y);
}
}
A 0
B 2
C 5
D 80
正确答案: A
参考答案:
5 >> 2 相当于 5除于2两次,等于1 ,>>> 表示无符号右移,高位用0 填充,0001右移两位 0000,所以选A
2、以下代码结果是什么?
public class foo {
public static void main(String sgf[]) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+"."+b);
}
static void operate(StringBuffer x,StringBuffer y) {
x.append(y);
y=x;
}
}
A 代码可以编译运行,输出“AB.AB”。
B 代码可以编译运行,输出“A.A”。
C 代码可以编译运行,输出“AB.B”。
D 代码可以编译运行,输出“A.B”。
正确答案: C
参考答案:
作对这道题的关键是要理解Java的值传递,关于值传递和引用传递的解释如下:
值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递:是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。这道题中a、b(是引用的副本,Java中没有引用传递)传入operate()函数中,但最后a指向的对象的值发生了变化,而b指向的对象的值没有发生变化,这是因为x.append(y);改变了a指向的对象的值,而y=x;并没有改变b指向对象的值,指向将y指向了x所指向的对象(之前y和b指向同一个对象)。
3、在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()
A this.A(x)
B this(x)
C super(x)
D A(x)
正确答案: B
参考答案:
this(x)代表调用当前类的其它构造方法;this.A(x)只能调用其它的普通方法和成员变量;super(x)是调用父类的构造方法。
4、下面代码的运行结果是()
public static void main(String[] args){
String s;
System.out.println("s="+s);
}
A 代码编程成功,并输出”s=”
B 代码编译成功,并输出”s=null”
C 由于String s没有初始化,代码不能编译通过。
D 代码编译成功,但捕获NullPointException异常
正确答案: C
参考答案:
这里的S是局部变量,必须要初始化,否侧编译不通过。
5、在java7中,下列不能做switch()的参数类型是?
A int型
B 枚举类型
C 字符串
D 浮点型
正确答案: D
参考答案:不能做switch()参数的有float,double,long,blooean
6、一个以”.java”为后缀的源文件
A 只能包含一个类,类名必须与文件名相同
B 只能包含与文件名相同的类以及其中的内部类
C 只能有一个与文件名相同的public类,可以包含其他类
D 可以包含任意类
正确答案: C
参考答案:
可以有很多类,只有public修饰的类才要求与类名相同。
7、以下代码返回值是什么?
public boolean returnTest()
{
try
{
return true;
}
catch (Exception e)
{
}
finally
{
return false;
}
}
A true
B false
正确答案: B
参考答案:在这个语句块中,有finally是最后执行的,所以返回false,如果没有finally就会返回true。
8、以下()不是合法的标识符?
A STRING
B x3x
C void
D deSf
正确答案: C
参考答案:标识符可以由数字,字符,下划线,美元符号(不推荐)组成。
9、指出以下程序运行的结果是
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
//引用类型变量,传递的是地址,属于引用传递。
str="test ok";
ch[0]='g';
}
}
A good and abc
B good and gbc
C test ok and abc
D test ok and gbc
正确答案: B
10、下列有关JAVA异常处理的叙述中正确的是()
A finally是为确保一段代码不管是否捕获异常都会被执行的一段代码
B throws是用来声明一个成员方法可能抛出的各种非运行异常情况
C final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承
D throw是用来明确地抛出一个异常情况
正确答案: A B D
参考答案:
C选项方法的不能被重写
二、编程题
🔥统计回文
统计回文_牛客题霸_牛客网
【解题思路】:
本题使用暴力求解方式计算即可,遍历str1,将str2 insert进入str1的每个位置,判断是否是回文,这里注意的是,判断回文的时候,直接将字符串逆置,看是否相同就好了。是就++count;需要注意的是这里不neng能str1.insert(i, str2),这样的话str1改变了,判断下一个位置就不对了。所以每次使用str1重新给一个str,然后str.insert(i, str2),再判断。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1=sc.nextLine();
String str2=sc.nextLine();
int count=0;
for (int i=0;i<=str1.length();i++){
// 将字符串2插入到字符串1的每个位置,再判断是否是回文
StringBuffer str=new StringBuffer(str1);
str.insert(i,str2);
//注意这里,不能直接StringBuilder str5 = str.reverse();
//因为这样str本身又变了。
StringBuffer tmp=new StringBuffer(str);
StringBuffer str3=tmp.reverse();
if(str3.toString().equals(str.toString())){
count++;
}
}
System.out.print(count);
}
}
🔥连续最大和
连续最大和_牛客题霸_牛客网
【解题思路】:
状态方程式: max( dp[ i ] ) = getMax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] )
dp[i] 就是以数组下标为i 的数做为结尾的最大子序列和,注意是以i 为结尾,比如说现在有一个数组{6,-3,-2,7,-15,1,2,2},dp[2]就是以-2为结尾的,那么显然dp[3]的最大值就是1咯(6,-3,-2),dp[3]要以7结尾那么以7结尾的子序列最大和就是8(6,-3,-2,7)。现在我们开始细细品一下上面这个递推式,求dp[i]的时候是不是有两种可能,要么就是像上面的dp[3]一样,dp[2]求出来是1了,再加上自array[3]是最大的,那么还有一种可能就是说如果dp[2]我求出来是-100,那如果我也是dp[2]+array[3]的话是-93, 这时候dp[2]反而是累赘,最大就是自己(因为前面定义了必须以i为结尾,也就说必须以7结尾)。
import java.util.*;
public class Main{
public static int getMax(int a,int b){
return (a)>(b)?(a):(b);
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int[] array=new int[n];
for(int i=0;i<n;i++){
array[i]=sc.nextInt();
}
int sum=array[0];
int max=array[0];
for(int i=0;i<n;i++){
sum=getMax(sum+array[i],array[i]);
if(sum>=max){
max=sum;
}
}
System.out.print(max);
}
}