Почему выходные данные различаются, когда вводят «i» вместо «j» в качестве ключа в HashMap? - PullRequest
0 голосов
/ 17 февраля 2020

Я использую 2 для циклов, как показано ниже, чтобы получить сумму чисел в int []. Предполагается, что getTotal () дает сумму значений в массиве, которые меньше 100. Сумма рассчитывается путем сложения значений по одному, пока она не превысит сотню. Когда он превышает сотню, он начинается снова со следующего значения и добавляет одно за другим, как раньше.

private static HashMap<Integer,Integer> getTotal(){
    int total = 0;
    HashMap<Integer,Integer> finalTotal = new HashMap<Integer, Integer>();
    for (int i = 0; i < array.length; i++) {
        total += array.get(i);
        for (int j = i+1; j < array.length; j++) {
            if(total>100){
                finalTotal.put(j,total - array.get(j));
                total = 0;
            }
            else if(total<100){
                total += array.get(j);
            }
        }
    }
    return finalTotal;
}

При печати результата в карте ha sh он дает 2 разные карты ответов, когда я использую я и j как ключ. Разве это не значит, что в качестве ответов нужно давать одинаковые значения и просто разные ключи? Изменяется не только значение длины хеш-карты.

Было бы замечательно, если бы вы указали на любые ошибки и объяснили, почему это происходит.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Вам необходимо определить array перед его использованием.

0 голосов
/ 17 февраля 2020

Изменение вашего кода, для меньших чисел, например:

//*******************************************************************
// Welcome to CompileJava!
// If you experience any issues, please contact us ('More Info')  -->
//*******************************************************************

import java.lang.Math; // headers MUST be above the first class
import java.util.HashMap;

// one class needs to have a main() method
public class HelloWorld
{
  public static int[] array = {1,2,3,4,5,6,7,8,9,10};
  // arguments are passed using the text field below this editor
  public static void main(String[] args)
  {

    System.out.println(getTotal());
  }


  private static HashMap<Integer,Integer> getTotal(){
    int total = 0;
    HashMap<Integer,Integer> finalTotal = new HashMap<Integer, Integer>();
    for (int i = 0; i < array.length; i++) {
        total += array[i];
        System.out.println("");
        System.out.println("//i = " + i + "; arr[i] = " + array[i]);
        System.out.println("total += " + array[i] + "; // total = " + total);
        for (int j = i+1; j < array.length; j++) {
            System.out.println("    //j = " + j + "; arr[j] = " + array[j]);
            if(total>5){
                finalTotal.put(j,total - array[j]);
                System.out.println("    finalTotal += (" + j+", "+total + "-" + array[j]+")");
                total = 0;
            }
            else if(total<5){
                total += array[j];
                System.out.println("    total += " + array[j]+"; //total = "+total);
            }
        }
    }
    return finalTotal;
  }
}

Пройдя по коду и записав результаты, вы получите

//i = 0; arr[i] = 1
total += 1; // total = 1
    //j = 1; arr[j] = 2
    total += 2; //total = 3
    //j = 2; arr[j] = 3
    total += 3; //total = 6
    //j = 3; arr[j] = 4
    finalTotal += (3, 6-4)
    //j = 4; arr[j] = 5
    total += 5; //total = 5
    //j = 5; arr[j] = 6
    //j = 6; arr[j] = 7
    //j = 7; arr[j] = 8
    //j = 8; arr[j] = 9
    //j = 9; arr[j] = 10

//i = 1; arr[i] = 2
total += 2; // total = 7
    //j = 2; arr[j] = 3
    finalTotal += (2, 7-3)
    //j = 3; arr[j] = 4
    total += 4; //total = 4
    //j = 4; arr[j] = 5
    total += 5; //total = 9
    //j = 5; arr[j] = 6
    finalTotal += (5, 9-6)
    //j = 6; arr[j] = 7
    total += 7; //total = 7
    //j = 7; arr[j] = 8
    finalTotal += (7, 7-8)
    //j = 8; arr[j] = 9
    total += 9; //total = 9
    //j = 9; arr[j] = 10
    finalTotal += (9, 9-10)

//i = 2; arr[i] = 3
total += 3; // total = 3
    //j = 3; arr[j] = 4
    total += 4; //total = 7
    //j = 4; arr[j] = 5
    finalTotal += (4, 7-5)
    //j = 5; arr[j] = 6
    total += 6; //total = 6
    //j = 6; arr[j] = 7
    finalTotal += (6, 6-7)
    //j = 7; arr[j] = 8
    total += 8; //total = 8
    //j = 8; arr[j] = 9
    finalTotal += (8, 8-9)
    //j = 9; arr[j] = 10
    total += 10; //total = 10

//i = 3; arr[i] = 4
total += 4; // total = 14
    //j = 4; arr[j] = 5
    finalTotal += (4, 14-5)
    //j = 5; arr[j] = 6
    total += 6; //total = 6
    //j = 6; arr[j] = 7
    finalTotal += (6, 6-7)
    //j = 7; arr[j] = 8
    total += 8; //total = 8
    //j = 8; arr[j] = 9
    finalTotal += (8, 8-9)
    //j = 9; arr[j] = 10
    total += 10; //total = 10

//i = 4; arr[i] = 5
total += 5; // total = 15
    //j = 5; arr[j] = 6
    finalTotal += (5, 15-6)
    //j = 6; arr[j] = 7
    total += 7; //total = 7
    //j = 7; arr[j] = 8
    finalTotal += (7, 7-8)
    //j = 8; arr[j] = 9
    total += 9; //total = 9
    //j = 9; arr[j] = 10
    finalTotal += (9, 9-10)

//i = 5; arr[i] = 6
total += 6; // total = 6
    //j = 6; arr[j] = 7
    finalTotal += (6, 6-7)
    //j = 7; arr[j] = 8
    total += 8; //total = 8
    //j = 8; arr[j] = 9
    finalTotal += (8, 8-9)
    //j = 9; arr[j] = 10
    total += 10; //total = 10

//i = 6; arr[i] = 7
total += 7; // total = 17
    //j = 7; arr[j] = 8
    finalTotal += (7, 17-8)
    //j = 8; arr[j] = 9
    total += 9; //total = 9
    //j = 9; arr[j] = 10
    finalTotal += (9, 9-10)

//i = 7; arr[i] = 8
total += 8; // total = 8
    //j = 8; arr[j] = 9
    finalTotal += (8, 8-9)
    //j = 9; arr[j] = 10
    total += 10; //total = 10

//i = 8; arr[i] = 9
total += 9; // total = 19
    //j = 9; arr[j] = 10
    finalTotal += (9, 19-10)

//i = 9; arr[i] = 10
total += 10; // total = 10
{2=4, 3=2, 4=9, 5=9, 6=-1, 7=9, 8=-1, 9=9}

Это всего лишь несколько шагов, и это действительно не похоже на то, что ты просил. Я рекомендую посмотреть, как использовать отладчик, и пройтись по коду.

Обратите внимание, что j - это не то же самое, что arr [j]

Обратите внимание, что циклы внутри циклов, все же l oop, и позаботьтесь о начальных позициях хэш-карт l oop.

, которые обновят свое значение, если вы вставите дубликат, учитывая ваш код (обратите внимание, что вы не обрабатываете случай, когда всего == 5/100, l oop достаточно раз, и это обязательно произойдет), и вы получите разные значения.

Начните с более мелких проблем / входов, которые вы можете отладить, и продолжайте свой путь вверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...