java函数调用,java函数调用数组

发布时间:2023-01-08

本文目录一览:

  1. JAVA中定义了函数,有返回值,怎么调用?
  2. java中的函数调用怎么理解?
  3. java 在主函数中调用函数的方法
  4. 怎样通过Java调用自己编写的R函数?
  5. JAVA如何调用C函数
  6. java怎么在一个函数里调用另一个函数的数组

JAVA中定义了函数,有返回值,怎么调用?

你可以这样理解 add(a,b) 中向 a、b 传值,在方法 add 中处理 a 和 b,然后得出一个数,例如 sum = a + b,然后这个方法就返回这个数,当然这个数的类型是你定义的。然后在某个地方你要用到这个 sum,你就可以这样用 sums = add(a,b);可以这样用,其实有返回类型的方法你可以认为它就是一个值来用就行了。

public static void main(String args[]){
    System.out.println("add(a,b)当a=1,b=2的时候,a+b的值为" + add(1,2)); // 有返回类型的方法可以直接看成是一个值
}

java中的函数调用怎么理解?

函数调用可以理解为: 你想去买一样东西,这时,可能会叫你的秘书去帮你买它。 您的秘书可能不熟悉市场,这时她委任采购部门去帮她购买你需要的东西。 不好意思,昨天有事匆忙留下一段,还有一段没有完成。。。 在 JAVA 中怎么使用?什么时候能用到? 我就大致的回答一下吧。如果不合心意,还请谅解! OOP 强调低耦合,高内聚。单一职责原则。还有许多模式以及原则,使你的系统富有弹性,易于扩展,修改,维护。 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。 所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。 耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。) 对于低耦合,粗浅的理解是: 一个完整的系统,模块与模块之间,尽可能的使其独立存在。 也就是说,让每个模块,尽可能的独立完成某个特定的子功能。 模块与模块之间的接口,尽量的少而简单。 如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。 这样有利于修改和组合。[1] 引用: 代码的话,我就不多说了。自己估量估量,就知道是怎么回事了。

java 在主函数中调用函数的方法

调用方法:先生成一个对象,用“对象.方法()”的方式调用。 调用说明:Java 中的 main 方法是静态的,用于程序的入口,在静态方法中无法调用非静态方法,只能调用静态方法。想调用静态方法的话就要先生成该类的一个对象,通过对象调用非静态方法。 调用举例:

public class A {
    public static void main(String[] args) {
        A a = new A();
        a.aaa();
    }
    public void aaa() {}
}

怎样通过Java调用自己编写的R函数?

Java 调用 R,就是使用 JRI.jar 中的 API,执行一条 R 语言命令,当然首先你要了解 R 语言的语法。

1. JRI 中主要的 API

  • Rengine R 引擎,通过它进行 R 语言的启动、运算、画图、关闭等功能。 一个线程只能实例化一次,推荐使用单例模式。 实例化代码:
    Rengine engine = new Rengine(null, false, null);
    
    Rengine.versionCheck() // R 版本校验,返回 true:版本校验通过 返回 false:版本校验未通过 engine.waitForR() // R 加载校验,返回 true:加载成功 返回 false:加载失败 engine.end() // 结束 R,在后续没有调用 R 的情况下使用,否则 R 将退出,不能继续使用 R。

2. REXP

  • REXP R 计算结果表达式
    REXP rexp = engine.eval_r(String str); // 执行 R 命令,返回结果 REXP
    rexp.asInt(); rexp.asDouble(); rexp.as.. // 将 REXP 转成 Java 类型
    engine.assign(String name, double d); // 定义 R 变量,name 为 R 中变量的名字
    

以上大概了解了 JRI 的基本 API,下面写个简单的例子。

// 求 n 个数的最大值
Rengine engine = new Rengine(null, false, null);
int[] arr = new int[]{-1, 2, 1, -3, 5, 4, -2};
engine.assign("x", arr);
REXP rexp = engine.eval_r("max(x)");
int max = rexp.asInt();
System.out.println(max);
engine.end();

JAVA如何调用C函数

要在 Java 中调用 C 语言的库,需要使用 Java 提供了 JNI。

举例说明

在 C 语言中定义一个 void sayHello() 函数(打印 HelloWorld);然后在 Java 中调用这个函数显示 HelloWorld。 现在分别从 Java 和 C 语言两部分说明:

1. Java 部分

首先定义一个 HelloNative,在其中声明 sayHello 函数,函数要声明为 native 类型。如下:

public class HelloNative {
    public native void sayHello();
}

编译这个类,生成 class 文件:

javac HelloNative.java

利用 javah 生成需要的 h 文件:

javah HelloNative

生成的 h 文件大概如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloNative_sayHello
  (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

可以看一下上面自动生成的程序,程序 include 了 jni.h,这个头文件在 $JAVA_HOME 下的 include 文件夹下。还可以发现生成的函数名是在之前的函数名前面加上了 Java_HelloNative

2. C 语言部分

根据上面生成的 h 文件编写相应的代码实现,建立一个 HelloNative.cpp 用来实现显示 HelloWorld 的函数。如下:

#include <jni.h>
#include "HelloNative.h"
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject) {
    printf("Hello World!\n");
}

代码编写完成之后,我们再用 gcc 编译成库文件,命令如下:

gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp

这样就会在当前目录下生成一个 libHelloNative.so 的库文件。这时需要的库已经生成,在 C 语言下的工作已经完成了。 接下来需要在 Java 中编写一个程序测试一下。在程序前,需要将我们的库载入进去。载入的方法是调用 Java 的 System.loadLibrary("HelloNative");

public class TestNative {
    static {
        try {
            System.loadLibrary("HelloNative");
        } catch (UnsatisfiedLinkError e) {
            System.out.println("Cannot load hello library:\n" + e.toString());
        }
    }
    public static void main(String[] args) {
        HelloNative test = new HelloNative();
        test.sayHello();
    }
}

但是再编译后,运行的时候,问题又出现了。

Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
    at HelloNative.sayHello(Native Method)
    at TestNative.main(TestNative.java:13)

载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢? 用 System.getProperty("java.library.path") 查看,发现 java.library.path 中并不存在当前的目录。主要有以下的几个解决办法:

  1. 将生成的库复制到 java.library.path 有的路径中去,当然这样不是很好。
  2. 设置环境变量 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH,将当前的目录加入到 LD_LIBRARY_PATH 中。
  3. 设置 Java 的选项,将当前的目录加入到其中。java -Djava.library.path=.:$LD_LIBRARY_PATH 这样之后程序就能够成功运行了。可以看见显示的 "Hello World!" 了。

java怎么在一个函数里调用另一个函数的数组

import java.util.Scanner;
interface getGrade {
    public void finGrade();
}
class First implements getGrade {
    int a[];
    public First() {}
    public First(int grade[]) {
        a = grade.clone();
    }
    public void finGrade() {
        int sum;
        for (int i = 0; i <= 4; i++) {
            sum = sum + a[i];
        }
        int num;
        num = sum / 5;
        System.out.println("平均成绩为:" + num);
    }
};
class Second implements getGrade {
    int a[];
    public Second() {}
    public Second(int grade[]) {
        a = grade.clone();
    }
    public void finGrade() {
        int j, k, t;
        for (j = 1; j < 5; j++) {
            for (k = 0; k < 5 - j; k++) {
                if (a[k] > a[k + 1]) {
                    t = a[k];
                    a[k] = a[k + 1];
                    a[k + 1] = t;
                }
            }
        }
        a[0] = 0;
        a[4] = 0;
        int sun;
        for (int i = 0; i <= 4; i++) {
            sun = sun + a[i];
        }
        int nun;
        nun = sun / 3;
        System.out.println("平均成绩为:" + nun);
        System.out.println("(去掉一个最高分和一个最低分)");
    }
};
public class exer4 {
    public static void main(String args[]) {
        System.out.println("请依次输入评委所给的分数");
        System.out.println("(默认为五个评委)");
        int a[] = new int[5];
        Scanner reader = new Scanner(System.in);
        for (int i = 0; i < 5; i++) {
            a[i] = reader.nextInt();
        }
        System.out.println("请选择评分方式");
        System.out.println("1.直接求平均分");
        System.out.println("2.去掉一个最高分和一个最低分");
        int b = reader.nextInt();
        if (b == 1) {
            First first = new First(a);
            first.finGrade();
        } else if (b == 2) {
            Second second = new Second(a);
            second.finGrade();
        }
    }
}