有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

增量Java增量编号

问题是我无法正确显示输出
输入:

6
贝里克78
Zeynep 100
Saniya 75
Daulet 45
Abay 96
安德烈75

预期产出:

1) Zeynep: 100
2) Abay: 96
3) Berik: 78
4) Saniya: 75
5) Andrey: 75
6) Daulet: 45

我的输出:

1) Zeynep: 100
2) Abay: 96
3) Berik: 78
4) Saniya: 75
4) Andrey: 75
5) Daulet: 45

如您所见,编号不正确。当两点相等时,错误必须在增量逻辑中的某个地方。我将编号作为参数传递给printMax方法

import java.util.ArrayList;
import java.util.Scanner;

public class a1_t13 {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int num = input.nextInt();
    ArrayList<Integer> scores_unsorted = new ArrayList<>();
    ArrayList<String> names_unsorted = new ArrayList<>();


    for (int i=0; i<num; i++) {
        String value = input.next();
        int numValue = input.nextInt();
        scores_unsorted.add(numValue);
        names_unsorted.add(value);
    }

    int b = 1;
    for (int z = 0; z<num;z++) {
        int c = getMax(scores_unsorted);
        printMax(c, names_unsorted, scores_unsorted, b);
        b++;     //<================ HERE I'M DOING AN INCREMENTATION

    }

}

public static int getMax(ArrayList list) {
    int max = 0;
    for(int i=0;i<list.size();i++) {
        if (max< (int)list.get(i)) {
            max = (int) list.get(i);
        }
    }
    return max;
}


public static void printMax(int score, ArrayList names_unsorted, ArrayList scores_unsorted, int order) {
    for (int i=0;i<names_unsorted.size();i++) {
        if ((int) scores_unsorted.get(i) == score) {
            int score_index = scores_unsorted.indexOf(Integer.valueOf(score));
            System.out.println(order+")"+names_unsorted.get(score_index).toString()+": "+score);
            scores_unsorted.remove(score_index);
            names_unsorted.remove(score_index);
        }
    }
}

}


共 (3) 个答案

  1. # 1 楼答案

    删除100、96和78后,两个列表都有3个元素。 现在75是最大值

    printMax(c,names_unsorted,scores_unsorted,b)方法在c=75和b=4时调用

    现在在printMax()中,此条件将适用于两个元素:

    if ((int) scores_unsorted.get(i) == score)
    

    现在比分是75分,名单上还有两个75分。因此,如果已经找到循环,就应该打破循环

    您的if条件块应如下所示:

    if ((int) scores_unsorted.get(i) == score) {
        int score_index = scores_unsorted.indexOf(Integer.valueOf(score));       
        System.out.println(order+")"+names_unsorted.get(score_index).toString()+": "+score);
        scores_unsorted.remove(score_index);
        names_unsorted.remove(score_index);
        break;
    }
    
  2. # 2 楼答案

    问题出在printMax方法中,因为您对所有名称进行了迭代,其中两个具有相同的计数,并且您使用相同的顺序号打印了这两个名称。如果在第一次发现后中断循环,它将起作用

     public static void printMax(int score, ArrayList names_unsorted, ArrayList scores_unsorted, int order) {
        for (int i = 0; i < names_unsorted.size(); i++) {
            if ((int) scores_unsorted.get(i) == score) {
                int score_index = scores_unsorted.indexOf(Integer.valueOf(score));
                System.out.println(order + ")" + names_unsorted.get(score_index).toString() + ": " + score);
                scores_unsorted.remove(score_index);
                names_unsorted.remove(score_index);
                break;
            }
        }
    }
    
  3. # 3 楼答案

    问题是,在printMax函数中,即使找到并打印正在搜索的最大记录,并且在退出循环后增加了b值,也会遍历整个数组。使其正常工作的最简单方法是在if body的末尾添加break:

    public static void printMax(int score, ArrayList names_unsorted, ArrayList scores_unsorted, int order) {
        for (int i=0;i<names_unsorted.size();i++) {
            if ((int) scores_unsorted.get(i) == score) {
                int score_index = scores_unsorted.indexOf(Integer.valueOf(score));
                System.out.println(order+")"+names_unsorted.get(score_index).toString()+": "+score);
                scores_unsorted.remove(score_index);
                names_unsorted.remove(score_index);
                break;
            }
        }
    }