目录
选择题模块
1. 以下对继承的描述错误的是(A)
A:一个子类只能继承一个父类(接口:一个类可以实现多个接口)
2. 在Java中,一个类(B)
这道题和上面的题师出同门。
3. 以下不是Object 类的方法的是(D)
这道题我们可以看一下Object的源码,可以看出hasNext不是Object里面的方法,而是迭代器Iterator的方法。
4. Test.main() 函数执行后的输出是(D)
public class Test { public static void main(String [] args){ System.out.println(new B().getValue()); } static class A{ protected int value; public A(int v) { setValue(v); } public void setValue(int value){ this.value = value; } public int getValue(){ try{ value++; return value; } catch(Exception e){ System.out.println(e.toString()); } finally { this.setValue(value); System.out.println(value); } return value; } } static class B extends A{ public B() { super(5); setValue(getValue() - 3); } public void setValue(int value){ super.setValue(2 * value); } } }
考查点:继承+方法重写
编程题模块
1.Fibonacci数列
题目描述
思路分析
代码实现
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int N = scanner.nextInt();
int[] arr = new int[47];
arr[0] = 0;
arr[1] = 1;
for (int i = 2; i < 47; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
for (int i = 0; i < 47; i++) {
if (N == arr[i]) {
System.out.println(0);
break;
} else {
min(N, arr);
break;
}
}
}
}
private static void min(int N, int[] arr) {
int min = 0;
for (int i = 2; i < 47; i++) {
if (N > arr[i] && N < arr[i + 1]) {
min = (N - arr[i]) < (arr[i + 1] - N) ? (N - arr[i]) : (arr[i + 1] - N);
}
}
System.out.println(min);
}
}
上面这个是我的思路解出来的,看到了有大佬是这样做的,很强。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n =scanner.nextInt();
int f1 = 0;
int f2 = 1;
while(f2<n){
int f3 = f2+f1;
f1=f2;
f2= f3;
}
//循环结束 f1<n<=f2
int min = Math.min(n-f1,f2-n);
System.out.println(min);
//两行代码解决问题
}
}
2.合法括号序列判断
题目描述
思路分析
代码实现
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// Stack<Character> stack = new Stack<>();
// char[] array = A.toCharArray();
// for (int i = 0; i < array.length; i++) {
// if (array[i] == '(') {
// stack.push(array[i]);
// } else if (array[i] == ')') {
// if (stack.isEmpty()) {
// return false;
// } else if (stack.peek() == '(') {
// stack.pop();
// } else {
// return false;
// }
// }
// }
// return stack.isEmpty();
if (n % 2 != 0) {
return false;
}
Stack<Character> stack = new Stack<>();
char[] array = A.toCharArray();
for (int i = 0; i < array.length; i++) {
if(array[i] == '('){
stack.push(array[i]);
}else if (array[i] == ')'){
if(stack.isEmpty()){
return false;
}else if(stack.peek() == '('){
stack.pop();
}else{
return false;
}
}
}
return stack.isEmpty();
}
}
3.两种排序方法
题目描述
思路分析
代码实现
import java.util.Scanner;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) throws Exception {
//BufferReader 从字符流中读取文本并且缓存
BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bi.readLine());
String[] str = new String[n];
for (int i = 0; i < n; i++) {
str[i] = bi.readLine();
}
//判断
if (isSortLength(str) && isSortZiDian(str)) {
System.out.println("both");
} else if (isSortLength(str)) {
System.out.println("lengths");
} else if (isSortZiDian(str)) {
System.out.println("lexicographically");
} else {
System.out.println("none");
}
}
//字典序
public static boolean isSortZiDian(String[] str) {
for (int i = 0; i < str.length - 1; i++) {
//用当前字符串和后一个字符串比较,如果字典序大于后一个,说明排序混乱,直接返回false
if (str[i].compareTo(str[i + 1]) > 0) {
return false;
}
}
return true;
}
//长度序
public static boolean isSortLength(String[] str) {
for (int i = 0; i < str.length - 1; i++) {
//如果当前字符串长度大于后一个字符串长度,说明排序混乱,返回false
if (str[i].length() > str[i + 1].length()) {
return false;
}
}
return true;
}
}
//****重点
//代码中使用compareTo方法
//用来比较大小的 a.compareTo(b) 如果a比b大输出1 a=b输出0 a比b小输出-1
4.求最小公倍数
题目描述
思路分析
代码实现
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int A = scanner.nextInt();
int B = scanner.nextInt();
System.out.println((A*B)/bigNum(A, B));
}
}
//最大公约数
private static int bigNum(int a, int b) {
if (a == b) {
return a;
}
if(a<b){
int tmp = a;
a=b;
b=tmp;
}
int r;
while((r=a%b)>0){
a=b;
b=r;
}
return b;
}
}
我自己还有一种解法,仅供大家参考>>>
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int A = scanner.nextInt();
int B = scanner.nextInt();
System.out.println(smallNum(A, B));
//System.out.println((A*B)/bigNum(A, B));
}
}
private static int smallNum(int a, int b) {
//最小公倍数
for (int i = 1; i < a * b; i++) {
if (i % a == 0 && i % b == 0) {
return i;
}
}
return a * b;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119537.html