Java 我无法从数组中返回值

Java 我无法从数组中返回值,java,arrays,Java,Arrays,这是评估工作,所以请不要给出一个直接的答案 我的程序应该计算用户等级:“通过”、“失败”或“通过并获得补偿”。但是,它不会返回答案。我不明白为什么——有人能帮忙吗 公共类标记计算器{ 静态整数[]标记=新整数[12] //public static Scanner keyboard = new Scanner(System.in); public static void main(String[] args) { Scanner kb = new Scanner(System.in);

这是评估工作,所以请不要给出一个直接的答案

我的程序应该计算用户等级:“通过”、“失败”或“通过并获得补偿”。但是,它不会返回答案。我不明白为什么——有人能帮忙吗

公共类标记计算器{ 静态整数[]标记=新整数[12]

//public static Scanner keyboard = new Scanner(System.in);
public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);
    int weighting;
    int coursework;
    int exammark;

    System.out.println("Please enter course work weighting");
    marks[0]= kb.nextInt();

    System.out.println("Please enter course work mark");
    marks[1]= kb.nextInt();

    System.out.println("Please enter exam mark");
    marks[2]= kb.nextInt();


    MarkCalculator mc = new MarkCalculator();
    mc.computeMarks(marks);

}




public String[] computeMarks(int[] marks) {

    final int[] WEIGHTING = {55,66,55,44,33,44};
    String[] results = new String[WEIGHTING.length];
    for (int i = 0; i < marks.length / 2; i++) {

        int exam = marks[i];
        int cw = marks[i];
        int weight = WEIGHTING[i];
        int formula = ((cw + weight) + (exam * (100 - weight)) / 100);

        if (formula >= 40){
            results[i]="PASS";
        } else if ((formula < 39) && (formula > 35)){
            results[i]="COMPENSATION PASS";
        }else{
            results[i]="FAIL";

        }

    }

    return results;
}
//公共静态扫描仪键盘=新扫描仪(System.in);
公共静态void main(字符串[]args){
扫描仪kb=新扫描仪(System.in);
整数加权;
国际课程;
国际考试标志;
System.out.println(“请输入课程作业权重”);
标记[0]=kb.nextInt();
System.out.println(“请输入课程作业分数”);
marks[1]=kb.nextInt();
System.out.println(“请输入考试分数”);
marks[2]=kb.nextInt();
MarkCalculator mc=新的MarkCalculator();
mc.计算机马克(马克);
}
公共字符串[]计算标记(整数[]标记){
最终整数[]权重={55,66,55,44,33,44};
字符串[]结果=新字符串[WEIGHTING.length];
对于(int i=0;i=40){
结果[i]=“通过”;
}否则如果((公式<39)和(&(公式>35)){
结果[i]=“补偿通过”;
}否则{
结果[i]=“失败”;
}
}
返回结果;
}
}

这里有个问题。权重没有初始大小


这里有个问题。权重没有初始大小

另外:您不会用任何东西初始化标记。试试这个:

System.out.println("Please enter course work weighting");
        marks[0]= kb.nextInt();

        System.out.println("Please enter course work mark");
        marks[1]= kb.nextInt();

        System.out.println("Please enter exam mark");
        marks[2]= kb.nextInt();

        MarkCalculator mc = new MarkCalculator();
        mc.computeMarks(marks);

另外:您不会用任何东西初始化标记。试试这个:

System.out.println("Please enter course work weighting");
        marks[0]= kb.nextInt();

        System.out.println("Please enter course work mark");
        marks[1]= kb.nextInt();

        System.out.println("Please enter exam mark");
        marks[2]= kb.nextInt();

        MarkCalculator mc = new MarkCalculator();
        mc.computeMarks(marks);

问题是权重是空的

final int[] WEIGHTING = {}; // empty
String[] results = new String[WEIGHTING.length];
for (int i = 0; i < marks.length / 2; i++) {

    int exam = marks[i];
    int cw = marks[i];
    int weight = WEIGHTING[i]; // You cant access elements from an empty array
这是你的及格分数,是空的

编辑

您的程序无法运行的原因是,您无法从计算机测试中捕获结果。您应该将其存储在main中的数组中,如

String[] result = mc.computeMarks(marks);

for(int k=0;k<result.length;k++)
{
    System.out.println(result[k]);
}
String[]result=mc.computeMarks(标记);

对于(int k=0;k而言,问题在于权重为空

final int[] WEIGHTING = {}; // empty
String[] results = new String[WEIGHTING.length];
for (int i = 0; i < marks.length / 2; i++) {

    int exam = marks[i];
    int cw = marks[i];
    int weight = WEIGHTING[i]; // You cant access elements from an empty array
这是你的及格分数,是空的

编辑

您的程序无法运行的原因是您无法从计算机标记中捕获结果。您应该将其存储在main中的数组中,如

String[] result = mc.computeMarks(marks);

for(int k=0;k<result.length;k++)
{
    System.out.println(result[k]);
}
String[]result=mc.computeMarks(标记);


对于(int k=0;kYes,您可以在方法中将变量声明为final。我在权重中初始化了数字,但只是为了找到解决方案而将它们取出。我有六个随机数,但我不必初始化数字,因为如果有人的权重超出了6个数字?@user2961364,那么您需要一个
Ar光线列表
或某种类型的
列表
。数组不会自动递增。请记住,您在上面的代码中没有为
标记
指定值。是的,您可以在方法中将变量声明为final。我在权重中初始化了数字,但只是将其取出,希望找到一个解决方案。我有六个随机n数字,但我不应该初始化数字,因为如果有人的权重超出了6个数字?@user2961364,那么你需要一个
数组列表
或某种
列表
。数组不会自动递增。另外,请记住,你没有在上面的代码中为
标记
指定值。当
formula==39
result将失败,我不认为这是你所期望的,只是一个旁注,当
formula==39
result将失败时,我不认为这是你所期望的,因为标记[0],标记[1]和标记[2]。你的意思是标记[0],标记[1]和标记[2],因为标记没有定义?所以我改变了----final int[]权重={55,66,55,44,33,44};---所以加权现在有一些数字作为cw的加权。但是对于markCalculator位,我不太明白,它不允许我把数字放在里面来通过评分。但是当我输入标记量和加权时,程序仍然终止,没有任何计算,它应该完成。你可以在像Syst这样的地方打印结果吗em.out.println(mc.computeMarks(marks.toString());?嘿,这里是马克[0]、马克[1]和马克[2]。你是说马克[0]、马克[1]和马克[2],因为马克没有定义吗?所以我改变了----final int[]权重={55,66,55,44,33,44};---所以加权现在有一些数字作为cw的加权。但是对于markCalculator位,我不太明白,它不允许我把数字放在里面来通过评分。但是当我输入标记量和加权时,程序仍然终止,没有任何计算,它应该完成。你可以在像Syst这样的地方打印结果吗em.out.println(mc.computeMarks(marks.toString());?我已经将权重设置为final int[]权重={55,66,55,44,33,44};以及marks[0]=kb.nextInt();marks[1]=kb.nextInt();marks[2]=kb.nextInt();所以标记不再是空的了?仍然没有收到通知我是否通过的答案我已经将权重设置为final int[]权重={55,66,55,44,33,44};标记[0]=kb.nextInt();标记[1]=kb.nextInt();标记[2]=kb.nextInt();因此标记不再为空?仍然没有收到通知我是否通过的答案