2013-04-03 6 views
0

Итак, в основном, вопросы задают мне, чтобы найти сумму чисел в массиве. За исключением числа «13» очень не повезло, поэтому он не считается «13» и числом, которое приходит сразу после «13».Сумма целых чисел в массиве

Это то, что я сделал:

public int sum13(int[] nums) { 
    int d = 0; 
    int sum = 0; 

    for (int i=0;i<nums.length;i++){ 
    if(nums[i] == 13){ 
    d = i; 
    break; 
    } 
    else{ 
    d = nums.length; 
    } 
    } 
    for(int i=0;i<d;i++){ 
    sum = sum + nums[i]; 
    } 
    return sum; 
} 

Даже если я пройти большинство тестов, я до сих пор не могу понять, как исключить номер в непосредственной близости от 13 от суммы.

Например, sum13 ({1, 2, 2, 1, 13}) → 6 ПРОПУСТИТЬ! sum13 ({13, 1, 13}) → 0 ПРОПУСТИТЬ! Но, sum13 ({13, 1, 2, 13, 2, 1, 13}) → 0 RETURNS 0 вместо этого, когда он останавливается в первом случае 13.

ответ

6

Почему вы используете две петли? Если число 13, просто не добавить его или следующий номер, сумму, как это:

public int sum13(int[] nums) { 
    int sum = 0; 
    for (int i = 0; i < nums.length; i++) { 
     if (nums[i] == 13) { 
      i++; 
     } else { 
      sum = sum + nums[i]; 
     } 
    } 
    return sum; 
} 
+0

Ahh ... так что если я хочу исключить число рядом с 13, мне просто нужно увеличить i на 2 вместо этого? (i = + 2) –

+0

'i' уже увеличивает каждую итерацию, и никакое добавление не выполняется, когда встречается' 13'. Итак, написав «i ++», мы пропустим номер после «13». – Keppil

1

Слышишь ли, что делает continue?

if(nums[i] == 13){ 
    d = i; 
    continue; 
} 
2

Как насчет суммируя непосредственно в первом for цикле? Короче, проще и быстрее путь :)

public int sum13(int[] nums) { 
    int sum = 0; 

    for (int i=0;i<nums.length;i++){ 
    if (nums[i] != 13) { 
     sum += nums[i]; 
    } else { 
     i++; 
    } 
    } 
    return sum; 
} 
4

По вашему вопросу вы исключаете, если число 13 & его непосредственный преемник. Итак, когда вы найдете 13 приращение счетчика цикла еще раз:

for(int i=0;i<nums.length;i++){ 
    if(nums[i] == 13) { 
    i++; 
    } 
    else { 
    sum = sum + nums[i]; 
    } 
    } 

Это, естественно, пропустите следующий элемент из 13, если есть один в массиве.

0
public int sum13(int[] nums) { 
     boolean skip = false; 
     int sum = 0; 

     for (int i=0;i<nums.length;i++){ 
     if(nums[i] == 13){ 
      skip=true; 
      continue; 
     } 
     else{ 
     if(skip) { 
      skip=false; 
      continue; 
     } 
     sum+=nums[i]; 
     } 
     } 

     return sum; 
    } 
0

То, что вы на самом деле делаете остановки при первом появлении 13.

попробовать это:

public int sum13(int[] nums) { 
    int sum = 0; 

    for (int i = 0; i < nums.length; i++) { 
     if (nums[i] == 13) { 
      i++; 
     } else { 
      sum += nums[i]; 
     } 
    } 

    return sum; 
} 

Я не проверял, но он должен работать ...

Приветствия!

0

Попробуйте

public int mySum(int[] nums, int except) { 
     int sum = 0; 
     for (int i = 0; i < nums.length; i++) { 
      sum += (nums[i] == except) ? 0: nums[i]; 
     } 
     return sum; 
    } 

Тогда

mySum(nums, 13) 
0

использовать по-прежнему; если значение равно 13.

public int sum13(int[] nums) { 
    int sum = 0; 
    for (int i=0;i<nums.length;i++){ 
    if(nums[i] == 13){ 
     continue; 
    } 
    else{ 
     sum = sum + nums[i]; 
    } 
    } 
    return sum; 
} 
+0

Это не дает ответа на вопрос.Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/faq#reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/privileges/comment). – guerda

+0

@guerda За помощью для консультирования. Я добавил необходимый блок кода. – Vasu

0

Попробуйте это.

public int sum(int[] nums) { 
    int sum = 0; 
    for (int i = 0; i < nums.length;) { 
     if (nums[i] == 13) 
      i = i + 2; 
     else { 
      sum = sum + nums[i]; 
      i++; 
     } 
    } 
    return sum; 
} 
Смежные вопросы