2015-09-20 2 views
1

У меня с моими исследованиями, у меня проблема, когда я должен получить IP-адрес от пользователя, а затем повторить его с самого правого числа, и если это число будет равно или больше 256, то я должен повторить число -1 перед этим, а это значение равно 0.Для цикла с if inside not working

Я попытался решить его, просто сделав сначала примитивный код, который будет делать это один раз и только по пользовательскому вводу, и после этого я добавит больше сложности, например, оригинальную более чем одну итерацию, проверит ошибки и поместит код в файлы и классы propper .java. Я понимаю, что это было бы лучше с ArrayList, но я решил добавить ArrayList вместо простого массива позже.

Может ли кто-нибудь рассказать мне, почему цикл с условием put outofarraybound исключение, когда я не пытаюсь повторить «i»?

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

здесь полный код так далеко:

package com.ipadresa.classes; 

    import java.util.Scanner; 

    public class Hlavni { 

    public static void main(String[] args) { 

     int i = 0; 

     int[] zasobnikIPadresa = new int[4];   
     Scanner ctecka = new Scanner(System.in); 

     for (i = 0; i < zasobnikIPadresa.length; i++) { 
      zasobnikIPadresa[i] = ctecka.nextInt(); 
     } 

     System.out.print("Original IP adress: "); 
     for (i = 0; i < zasobnikIPadresa.length; i++) { 

      if (i < zasobnikIPadresa.length - 1) { 
       System.out.print(zasobnikIPadresa[i] + "."); 
      } else { 
       System.out.print(zasobnikIPadresa[i]); 
      }   
     } System.out.println(); 


     int pomoc = 0; 

     for (i = 3; i >= 0; i--) { 
      pomoc = zasobnikIPadresa[i]; 

      if (pomoc > 255) {    
       zasobnikIPadresa[i] = 0; 
       zasobnikIPadresa[i-1] = pomoc + 1; 
      }   
     } 


     System.out.print("Final IP adress: "); 
     for (i = 0; i < zasobnikIPadresa.length; i++) { 

      if (i < zasobnikIPadresa.length - 1) { 
       System.out.print(zasobnikIPadresa[i] + "."); 
      } else { 
       System.out.print(zasobnikIPadresa[i]); 
      }   
     }  

     ctecka.close(); 
    } 
} 

ответ

6

С этим для условия цикла, for (i = 3; i >= 0; i--) { переменная i разрешено == 0, то давайте посмотрим, что индекс массива здесь, когда i 0 :

zasobnikIPadresa[i-1] = pomoc + 1; 

его -1. Уч.

+0

Да, это была проблема, спасибо за указание на это. – Jan

2

Что делать, если условие

pomoc > 255 

верно, когда

i==0. 

Тогда вы будете получать доступ к zasobnikIPadresa [-1], т.е. из границы.