void
merge_sort_2d
(
int
array
[
M
]
[
N
]
,
int
left_i
,
int
left_j
,
int
right_i
,
int
right_j
,
int
array_extra
[
M
]
[
N
]
)
{
int
l
=
to_index_1d
(
left_i
,
left_j
)
;
int
r
=
to_index_1d
(
right_i
,
right_j
)
;
if
(
l
>=
r
)
{
return
;
}
int
mid
=
l
+
(
r
-
l
)
/
2
;
int
mid_i
=
to_index_2d_row
(
mid
)
;
int
mid_j
=
to_index_2d_col
(
mid
)
;
merge_sort_2d
(
array
,
left_i
,
left_j
,
to_index_2d_row
(
mid
)
,
to_index_2d_col
(
mid
)
,
array_extra
)
;
merge_sort_2d
(
array
,
to_index_2d_row
(
mid
+
1
)
,
to_index_2d_col
(
mid
+
1
)
,
right_i
,
right_j
,
array_extra
)
;
int
i
,
j
,
k
;
int
left_len
=
mid
-
l
+
1
;
int
right_len
=
r
-
mid
;
for
(
i
=
l
;
i
<=
mid
;
i
++
)
{
array_extra
[
to_index_2d_row
(
i
)
]
[
to_index_2d_col
(
i
)
]
=
array
[
to_index_2d_row
(
i
)
]
[
to_index_2d_col
(
i
)
]
;
for
(
j
=
mid
+
1
;
j
<=
r
;
j
++
)
{
array_extra
[
to_index_2d_row
(
j
)
]
[
to_index_2d_col
(
j
)
]
=
array
[
to_index_2d_row
(
j
)
]
[
to_index_2d_col
(
j
)
]
;
for
(
i
=
l
,
j
=
mid
+
1
,
k
=
l
;
i
<=
mid
&&
j
<=
r
;
k
++
)
{
if
(
array_extra
[
to_index_2d_row
(
i
)
]
[
to_index_2d_col
(
i
)
]
<
array_extra
[
to_index_2d_row
(
j
)
]
[
to_index_2d_col
(
j
)
]
)
{
array
[
to_index_2d_row
(
k
)
]
[
to_index_2d_col
(
k
)
]
=
array_extra
[
to_index_2d_row
(
i
)
]
[
to_index_2d_col
(
i
)
]
;
i
++
;
}
else
{
array
[
to_index_2d_row
(
k
)
]
[
to_index_2d_col
(
k
)
]
=
array_extra
[
to_index_2d_row
(
j
)
]
[
to_index_2d_col
(
j
)
]
;
j
++
;
while
(
i
<=
mid
)
{
array
[
to_index_2d_row
(
k
)
]
[
to_index_2d_col
(
k
)
]
=
array_extra
[
to_index_2d_row
(
i
)
]
[
to_index_2d_col
(
i
)
]
;
i
++
,
k
++
;
while
(
j
<=
r
)
{
array
[
to_index_2d_row
(
k
)
]
[
to_index_2d_col
(
k
)
]
=
array_extra
[
to_index_2d_row
(
j
)
]
[
to_index_2d_col
(
j
)
]
;
j
++
,
k
++
;
int
main
(
void
)
{
int
matrix
[
5
]
[
5
]
=
{
4
,
1
,
0
,
2
,
8
,
10
,
3
,
24
,
2
,
8
,
9
,
0
,
37
,
29
,
3
,
43
,
22
,
7
,
11
,
0
,
5
,
67
,
3
,
2
,
0
}
;
int
matrix_extra
[
5
]
[
5
]
=
{
0
}
;
merge_sort_2d
(
matrix
,
0
,
0
,
4
,
4
,
matrix_extra
)
;
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
for
(
int
j
=
0
;
j
<
5
;
j
++
)
{
printf
(
"%d, "
,
matrix
[
i
]
[
j
]
)
;
printf
(
"\n"
)
;
void
merge_sort
(
int
array
[
]
,
int
l
,
int
r
)
{
if
(
l
>=
r
)
{
return
;
}
int
mid
=
l
+
(
r
-
l
)
/
2
;
merge_sort
(
array
,
l
,
mid
)
;
merge_sort
(
array
,
mid
+
1
,
r
)
;
int
i
,
j
,
k
;
int
n1
=
mid
-
l
+
1
;
int
n2
=
r
-
mid
;
int
left
[
n1
+
1
]
,
right
[
n2
+
1
]
;
for
(
i
=
l
;
i
<=
mid
;
i
++
)
{
left
[
i
-
l
]
=
array
[
i
]
;
for
(
j
=
mid
+
1
;
j
<=
r
;
j
++
)
{
right
[
j
-
mid
-
1
]
=
array
[
j
]
;
left
[
n1
]
=
right
[
n2
]
=
INT_MAX
;
for
(
i
=
0
,
j
=
0
,
k
=
l
;
k
<=
r
;
)
{
if
(
left
[
i
]
<=
right
[
j
]
)
{
array
[
k
++
]
=
left
[
i
++
]
;
}
else
{
array
[
k
++
]
=
right
[
j
++
]
;
package com.chumi.dac.sp.csr.test;
* 代码转换
public class test {
public static final int M=5;
public static final int N=5;
public static final int INT_MAX=2147483647;
public static void main(String[] args) {
int[][] matrix = {{4, 1, 0, 2, 8}, {10, 3, 24, 2, 8}, {9, 0, 37, 29, 3}, {43, 22, 7, 11, 0}, {5, 67, 3, 2, 0}};
int[][] matrix_extra = {{0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}};
test obj=new test();
obj.merge_sort_2d(matrix, 0, 0, 4, 4, matrix_extra);
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(matrix[i][j]+",");
System.out.println("");
int to_index_2d_row(int k) {
return k / N;
int to_index_2d_col(int k) {
return k % N;
int to_index_1d(int i, int j) {
return j + i * N;
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
void merge_sort_2d(int[][] array_test, int left_i, int left_j, int right_i, int right_j, int[][] array_extra) {
int l = to_index_1d(left_i, left_j);
int r = to_index_1d(right_i, right_j);
if (l >= r) { return; }
int mid = l + (r - l) / 2;
int mid_i = to_index_2d_row(mid);
int mid_j = to_index_2d_col(mid);
merge_sort_2d(array_test, left_i, left_j, to_index_2d_row(mid), to_index_2d_col(mid), array_extra);
merge_sort_2d(array_test, to_index_2d_row(mid + 1), to_index_2d_col(mid + 1), right_i, right_j, array_extra);
int i, j, k;
int left_len = mid - l + 1;
int right_len = r - mid;
for (i = l; i <= mid; i++) {
array_extra[to_index_2d_row(i)][to_index_2d_col(i)] = array_test[to_index_2d_row(i)][to_index_2d_col(i)];
for (j = mid + 1; j <= r; j++) {
array_extra[to_index_2d_row(j)][to_index_2d_col(j)] = array_test[to_index_2d_row(j)][to_index_2d_col(j)];
for (i = l, j = mid + 1, k = l; i <= mid && j <= r; k++) {
if (array_extra[to_index_2d_row(i)][to_index_2d_col(i)]
< array_extra[to_index_2d_row(j)][to_index_2d_col(j)]) {
array_test[to_index_2d_row(k)][to_index_2d_col(k)]
= array_extra[to_index_2d_row(i)][to_index_2d_col(i)];
i++;
} else {
array_test[to_index_2d_row(k)][to_index_2d_col(k)]
= array_extra[to_index_2d_row(j)][to_index_2d_col(j)];
j++;
while (i <= mid) {
array_test[to_index_2d_row(k)][to_index_2d_col(k)] = array_extra[to_index_2d_row(i)][to_index_2d_col(i)];
i++; k++;
while (j <= r) {
array_test[to_index_2d_row(k)][to_index_2d_col(k)] = array_extra[to_index_2d_row(j)][to_index_2d_col(j)];
j++; k++;
void merge_sort(int array[], int l, int r) {
if (l >= r) { return; }
int mid = l + (r - l) / 2;
merge_sort(array, l, mid);
merge_sort(array, mid + 1, r);
int i, j, k;
int n1 = mid - l + 1;
int n2 = r - mid;
int[] left=new int[n1+ 1];
int[] right=new int[n2 + 1];
for (i = l; i <= mid; i++) {
left[i - l] = array[i];
for (j = mid + 1; j <= r; j++) {
right[j - mid - 1] = array[j];
left[n1] = right[n2] = INT_MAX;
for (i = 0, j = 0, k = l; k <= r;) {
if (left[i] <= right[j]) {
array[k++] = left[i++];
} else {
array[k++] = right[j++];
反思:好久没看C语言和Java语言,有些语法细节渐渐忘记了。。
C代码:#include <stdio.h>#include <stdlib.h>#include <limits.h>#define M 5#define N 5int to_index_2d_row(int k) { // 2d matrix, N cols return k / N;}int to_index_2d_col(int k) { // 2d matrix, N cols return k % N;}
Java底层是由C++去编写的,而C/C++由是封装汇编指令,进而转为二进制被计算机识别。所以当我们作为Java开发者,写好Java代码后,是需要进过JavaComplier进行编译生成class字节码文件,然后由类加载器将字节码文件加载至Java虚拟机内存中进行使用,JVM通过调用C的指令转汇编,从而使得代码生效。
本文将简单聊聊博主对Java类加载机制相关知识的理解。
一、Class字节码生成原理
这对于大多数开发者而已,应该耳熟能详,...
一、概念的了解
1.JVM——Java虚拟机,跨平台翻译,Java Virtual Machine;
2.JRE——Java程序的运行环境,包含运行时所需的类库,Java Runtime Environment;
3.JDK——Java开发工具包,包括javac编译器、java运行工具,Java Development Kit;
2.转到命令行开始
java -jar C2j-Complier.jar -m interpreter -f test.c
java -jar C2j-Complier.jar -m codegen -d true -f test.c
启动模式,默认为解释器
是否打开调试信息,默认为false(建议不开启)
指定运行文件的路径
void swap ( int arr[ 10 ], int i, int j) {
生产环境却报错
查找日志信息,发现Kerberos认证的时候,域名解析出现问题?!!
登录生产环境ping 043节点,能ping通说明域名是能解析成IP地址的(有DNS服务器)蓝瘦香菇,明明报错是域名解析问题为什么能ping通呢?
于是把本地Java访问集群代码改成IP试一试,呵呵报错了
Caused by: org.ietf.jgss.GSSException: No v...
### 回答1:
C语言转Java转换器是一种可将C语言代码转换为Java语言代码的工具。它可以帮助开发人员将已经存在的C语言项目迁移到Java平台上进行开发。
这种转换器的主要目的是将C语言的语法和结构转换成Java语言的等效代码。它通过识别C语言的特定语法特征,并将其转换成Java语言对应的语法结构。例如,将C语言中的指针转换成Java中的引用;将C语言中的结构体(struct)转换成Java中的类;将C语言中的函数转换成Java中的方法等等。
转换器的实现涉及到对C语言代码的分析和语法解析。首先,它会对C语言源代码进行词法分析和语法分析,将其转换成抽象语法树(Abstract Syntax Tree,简称AST)。然后,它会对AST进行遍历和转换,将C语言的结构和语法转换成Java语言对应的结构和语法。最后,它会生成Java语言的源代码文件,供开发人员使用。
C语言转Java转换器的优点是可以节省大量的时间和人力成本。对于已经存在的C语言项目,使用转换器可以避免重写整个项目的问题。它可以快速将C语言代码转换为Java语言,从而实现在Java平台上继续项目的开发和维护。
然而,值得注意的是,C语言和Java语言之间存在一些差异。C语言是面向过程的编程语言,而Java是面向对象的编程语言。因此,在转换过程中,一些特定的C语言特性和语法可能无法完全转换成Java语言。此外,C语言和Java语言都有自己的标准库和函数库,转换器可能需要对相关的库进行兼容性处理。
总的来说,C语言转Java转换器是一个方便的工具,可以帮助开发人员将C语言项目迁移到Java平台上,节省时间和成本。然而,在使用转换器时,需要注意C语言和Java语言之间的差异,以及对相关库的处理。
### 回答2:
C语言转Java转换器是一种用于将C语言代码转换为Java代码的工具。它能够自动将C语言中的各种语法和结构转换为Java语言对应的形式。
这个转换器的作用是帮助开发者将已有的C语言代码转换为可以在Java平台上运行的代码。它可以减少开发者重新编写代码的工作量,并且提高了代码的可维护性。
转换器的实现过程中,首先会对C语言代码进行解析和分析,识别出其中的各种语法和结构。然后根据转换规则,将C语言代码转化为对应的Java代码。转换过程中,一些基本的语法和结构可以直接转换,而一些复杂的语法和结构则需要通过算法进行深层次的分析和转换。
转换器的效果和准确性取决于其对C语言和Java语言的语法和规则的理解程度。较为简单的C语言代码可以比较容易地转换为Java代码,但是对于一些复杂的C语言代码,转换过程可能会更加复杂。
C语言转Java转换器是一个有益的工具,可以提高代码的重用性和跨平台的适应性。它能够帮助开发者将原本只能在C语言平台上运行的代码,转换为可以在Java平台上运行的代码,从而扩大了代码的应用范围。
然而,转换器也有一些局限性。由于C语言和Java语言之间存在一些差异,部分C语言代码可能无法完全转换为等价的Java代码。在使用转换器的过程中,开发者需要进行一些手工修正和调整,以确保转换后的代码能够正确地运行。
### 回答3:
C语言转Java转换器是一个用于将C语言代码转换成Java代码的工具。它可以帮助开发人员快速将现有的C语言项目迁移到Java平台上。
这个转换器的主要功能是将C语言的语法和结构转化为等效的Java语法和结构。它可以检测C语言代码中的关键字、数据类型、函数等元素,并将其对应转换为Java中的等效元素。除了基本的语法转换,转换器还可以处理C语言特有的功能,如指针、内存管理等。
C语言和Java语言在语法和编程范式上存在一些差异,因此在转换过程中需要进行一些修改和调整。转换器会自动进行这些调整,以确保转换后的Java代码能够正常运行并与现有Java项目兼容。
然而,由于C语言和Java语言之间的差异较大,完全自动化的转换是不可能的。一些复杂的功能和特性可能无法完全转换,因此开发人员在进行转换后需要手动检查和调整。此外,转换器也无法识别和转换与语言无关的库或特定于平台的代码。
综上所述,C语言转Java转换器是一个有用的工具,可以帮助开发人员快速迁移现有的C语言项目到Java平台上。但是,由于语言差异和特定功能的限制,手动调整和检查是必要的,以确保转换后的Java代码的正确性和稳定性。