Java基础题目

基础题

题目1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
JAVA2 简单运算
题目
题解(32)
讨论(49)
排行
入门 通过率:38.22% 时间限制:1秒 空间限制:256M
warning 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
描述
输入两个正整数ab,输出这两个正整数的和,差,积,商,模(若a>b则输出a-ba/ba%b的值反之输出b-ab/ab%a的值,不考虑小数,请使用int类型)
输入描述:
两个正整数
输出描述:
它们的和,差,积,商,模。每个值之间用空格隔开
示例1
输入:
10 5
复制
输出:
15 5 50 2 0

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
scanner.close();

if(a>b)
{
System.out.printf("%d",a+b);
}else {
System.out.printf("%d",a+b);
}


//write your code here......


}
}

字节码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 0 new #2 <java/util/Scanner> //堆区开辟对象 将它的引用压入操作数栈
3 dup //复制了该对象引用,并再次将其压入操作数栈。
4 getstatic #3 <java/lang/System.in : Ljava/io/InputStream;>
///获取 System.in,即标准输入流,并将其压入操作数栈。
7 invokespecial #4 <java/util/Scanner.<init> : (Ljava/io/InputStream;)V>
///调用 Scanner 的构造方法,使用 System.in 作为输入流参数来初始化 Scanner 对象。
10 astore_1
将操作数栈顶的引用类型Scanner(对象引用)存储到局部变量表的索引 1 位置 并弹出
11 aload_1
//从局部变量表中加载索引为 1 的引用类型(对象引用)到操作数栈。
12 invokevirtual #5 <java/util/Scanner.nextInt : ()I>
//调用 Scanner 对象的 nextInt 方法,读取输入的下一个整数,并将其结果(一个 int)压入操作数栈。
15 istore_2
将读取到的第一个整数存储到局部变量表的第二个位置(index 2)。并弹出
16 aload_1
加载 Scanner 对象引用。
17 invokevirtual #5 <java/util/Scanner.nextInt : ()I>
20 istore_3
将读取到的第一个整数存储到局部变量表的第二个位置(index 3)。并弹出
21 aload_1
加载 Scanner 对象引用
22 invokevirtual #6 <java/util/Scanner.close : ()V>
调用 Scanner 的 close 方法,关闭输入流。
---------

Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
scanner.close();
------------
25 iload_2
26 iload_3
2 3 索引值存储到操作数栈

27 if_icmple 55 (+28) if(a>b)
->比较大小
System.out.printf("%d",a+b);

30 getstatic #7 <java/lang/System.out : Ljava/io/PrintStream;>
//获取标准输出流 System.out。-到操作数栈
33 ldc #8 <%d>
//将格式化字符串 "%d" 压入操作数栈。
35 iconst_1
将常量整数 1 压入操作数栈,表示需要一个参数进行格式化。
///

36 anewarray #9 <java/lang/Object>
创建一个 Object 类型的新数组,大小为 1
39 dup
复制新建的数组引用。 压入操作数栈
40 iconst_0
将整数 0 压入操作数栈,表示数组的索引位置。
41 iload_2
42 iload_3
43 iadd
//将 23 索引数据存储到操作数栈-并且相加
44 invokestatic #10 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
调用 Integer.valueOf 方法,将和转换为 Integer 对象。
47 aastore
将 Integer 对象存储到数组的第一个位置。
48 invokevirtual #11 <java/io/PrintStream.printf : (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;>
调用 printf 方法输出结果。
51 pop
弹出 PrintStream 对象的引用,清理操作数栈。
52 goto 77 (+25)
77

代码跳处
System.out.printf("%d",a+b);
55 getstatic #7 <java/lang/System.out : Ljava/io/PrintStream;>
58 ldc #8 <%d>
60 iconst_1
61 anewarray #9 <java/lang/Object>
64 dup
65 iconst_0
66 iload_2
67 iload_3
68 iadd
69 invokestatic #10 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
72 aastore
73 invokevirtual #11 <java/io/PrintStream.printf : (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;>
76 pop
77 return

题目2
1
2
3
4
5
6
7
8
9
10
11
12
描述
定义一个int类型变量i,i为由浮点数变量d四舍五入后的整数类型,请将转换后的i进行输出
输入描述:
用户随机输入的浮点数
输出描述:
四舍五入之后的整数(小数点后一位>=5则进一,否则舍去)
示例1
输入:
14.99
复制
输出:
15
1
2
3
4
5
6
7
8
9
10
11
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double d= scanner.nextDouble();

//write your code here......
double v = d + 0.5;
int i= (int) v;
System.out.println(i);
}
}

字节码分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 0 new #2 <java/util/Scanner>
//创建scanner引用 压入到操作数栈 1
3 dup
//复制操作数栈顶的Scanner对象引用 并将该引用再次压入操作数栈。2
4 getstatic #3 <java/lang/System.in : Ljava/io/InputStream;>
//获取输入流 压入到操作数栈 3
7 invokespecial #4 <java/util/Scanner.<init> : (Ljava/io/InputStream;)V>
//调用构造方法 System.in 作为参数

10 astore_1 -弹出 1
11 aload_1 2
//int *1=&input;
//int **1=&1;--存到操作数栈
12 invokevirtual #5 <java/util/Scanner.nextDouble : ()D>
//调用 Scanner 对象的 nextDouble 方法,读取输入的 double 类型的数值,将其压入操作数栈。 3
15 dstore_2 弹出-数据存储到索引 2
Scanner scanner = new Scanner(System.in);

double d= scanner.nextDouble();


16 dload_2
压入操作数栈- 3
17 ldc2_w #6 <0.5>
将常量池中 #6 位置的 double 类型常量 0.5 压入操作数栈。 4
20 dadd
相加
21 dstore 4 3
弹出 最新的相加值 存储到槽4
23 dload 4 4
再压入操作数栈
25 d2i
将栈顶的 double 类型数值转换为 int 类型(取整)。
26 istore 6 3
弹出 存储到 6
28 getstatic #8 <java/lang/System.out : Ljava/io/PrintStream;>
31 iload 6 4 弹出 存储槽6
33 invokevirtual #9 <java/io/PrintStream.println : (I)V> 打印
36 return

题目3

不使用第三方变量交换值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();

//write your code here.......
a=a+b;
b=a-b;
a=a-b;

System.out.println(a+" "+b);
}
}

Java基础题目
http://example.com/2024/09/10/nk/
作者
John Doe
发布于
2024年9月10日
许可协议