代码之家  ›  专栏  ›  技术社区  ›  José Filipe Silva

试图找到2个不同数组的数量之间的平均值

  •  1
  • José Filipe Silva  · 技术社区  · 1 年前

    我试图找出两个不同数组的数量之间的平均值。事实上,我做到了,问题是,我正在进行验证,以确保两个数组的长度相同。因此,当我(故意)错误地定义其中一个的长度时,它会显示错误消息,并返回到定义数组长度,但当我对平均值进行计算时,出于某种原因,它会返回错误的值。从字面上看,除了调用compararValores()函数外,一切都很好。

    请救救我。

    import java.util.Scanner;
    
    public class MediaVetores {
        public static void main(String[] args) {
            int vec1 [];
            int vec2 [];
            vec1 = lerVetor1();
            vec2 = lerVetor2();
            mediaVetores(vec1, vec2);
        }
    
        static int lerInteiro(String pergunta){
            System.out.println(pergunta);
            Scanner ler = new Scanner(System.in);
            return ler.nextInt();
        }
    
        static int [] lerVetor1(){
            int tamVetor = lerInteiro("Quantos valores quer inserir no 1º vetor?: ");
            int vec1 [] = new int [tamVetor];
            for (int i = 0; i < tamVetor; i++){
                vec1 [i] = lerInteiro("Insira o valor do " + (i+1) + "º número do vetor: ");
            }
            return vec1;
        }
    
        static int [] lerVetor2(){
            int tamVetor = lerInteiro("Quantos valores quer inserir no 2º vetor?: ");
            int vec2 [] = new int [tamVetor];
            for (int i = 0; i < tamVetor; i++){
                vec2 [i] = lerInteiro("Insira o valor do " + (i+1) + "º número do vetor: ");
            }
            return vec2;
        }
    
        static void mediaVetores(int vec1 [],int vec2 [] ){
            int n1 = 0;
            int c1 = 0;
            int n2 = 0;
            int c2 = 0;
            int total = 0;
            int soma = 0;
            double media = 0.0;
            for (int i = 0; i < vec1.length; i++){
                n1 = n1 + vec1[i];
                c1 ++;
            }
            for (int j = 0; j < vec2.length; j++){
                n2 = n2 + vec2[j];
                c2 ++;
            }
            soma = n1 + n2;
            System.out.println(soma);
            total = c1 + c2;
            System.out.println(total);
            compararVetores(vec1, vec2);
            media = (double) soma / (double) total;
    
            System.out.println("A média dos valores inseridos nos vetores é de " + media);
    
        }
    
       static void compararVetores (int a[], int b[]){
            if (a.length != b.length){
                System.out.println("Os vetores devem ter o mesmo número de valores! Volte a introduzir novos tamanhos de vetores.");
                lerVetor1();
                lerVetor2();
    
            }
        }
    
    }
    
    
    2 回复  |  直到 1 年前
        1
  •  1
  •   Oleg Cherednik    1 年前

    首先,您必须简化代码:

    • 仅使用的一个实例 Scanner
    • 使用一种方法创建两个数组
    • 计算中值时避免使用未使用的变量

    然后你就不需要 compararVetores() 方法如果两个数组必须具有相同的长度,则应要求对数组大小使用一次,然后要求分别输入每个数组的元素。

    public static void main(String... args) {
        Scanner scan = new Scanner(System.in);
    
        System.out.print("How many values do you want to insert vector?: ");
        int total = scan.nextInt();
    
        int[] arr1 = createArray(scan, 1, total);
        int[] arr2 = createArray(scan, 2, total);
    
        mediaVectors(arr1, arr2);
    }
    
    private static int[] createArray(Scanner scan, int no, int total) {
        System.out.format("Enter total %d values of vector %d (space or enter are separators): ", total, no);
    
        int[] arr = new int[total];
    
        for (int i = 0; i < arr.length; i++)
            arr[i] = scan.nextInt();
    
        return arr;
    }
    
    private static void mediaVectors(int[] arr1, int[] arr2) {
        int total = arr1.length + arr2.length;
        int sum = Arrays.stream(arr1).sum() + Arrays.stream(arr2).sum();
        double media = (double) sum / (double) total;
    
        System.out.println("Sum of values: " + sum);
        System.out.println("Total values: " + total);
        System.out.format(Locale.ENGLISH, "The average of the values entered in the vectors: %.2f", media);
    }
    

    输出:

    How many values do you want to insert vector?: 4
    Enter total 4 values of vector 1 (space or enter are separators): 1 2 3 4
    Enter total 4 values of vector 2 (space or enter are separators): 5 6 7 8
    Sum: 36
    Total: 8
    The average of the values entered in the vectors: 4.50
    
        2
  •  0
  •   José Filipe Silva    1 年前

    :很抱歉,我对堆栈和编程有点陌生,所以这可能没有我想象的那么准确,而且我还不太清楚这个论坛是如何工作的。非常感谢你的帮助。 This is what happens when I run it properly

    And here it is after the verification for some reason