Инициализация переменных в цикле For (Java) - PullRequest
0 голосов
/ 03 октября 2018

Мне нужно создать программу, которая получает от пользователя 4 целых числа и проверяет, является ли ввод от 0 до 255 исключительным.Все работает, за исключением моего окончательного вывода, IP-адрес, который в значительной степени все входы в одну строку.Он продолжает печатать 0, потому что мне пришлось инициализировать мои переменные перед использованием их в массиве, поэтому я присвоил им значение 0. Однако это значение должно было измениться в цикле for, но оно все равно выводит неверное значение.Я могу распечатать IP-адрес только один раз, и он должен быть в конце.Я знаю, что есть более простой способ сделать это, но я все еще хочу знать, как решить эту проблему для дальнейшего использования.Вот мой код:

import java.util.Scanner;

класс Main {

public static void main(String[] args) {
    Scanner run = new Scanner(System.in);
    String per = ".";
    int firstInput = 0;
    int secondInput = 0;
    int thirdInput = 0;
    int fourthInput = 0;
    boolean firstMeetsParameters = true;
    boolean secondMeetsParameters = true;
    boolean thirdMeetsParameters = true;
    boolean fourthMeetsParameters = true;
    int[] inputs = new int[] {firstInput,secondInput,thirdInput,fourthInput};
    boolean[] condition = new boolean[] {firstMeetsParameters,secondMeetsParameters,thirdMeetsParameters,fourthMeetsParameters};
    String[] num = new String[] {"first", "second", "third", "fourth"};
    for(int x = 0; x < inputs.length; x++) {
        System.out.println("Please enter the " + num[x] + " octet:");
        inputs[x] = run.nextInt();
        if(inputs[x] < 0 || inputs[x] > 255) {
            condition[x] = false;
        }
    }
    for(int i = 0; i < inputs.length; i++){
        if(condition[i] == false) {
            System.out.println("Octet " + (i+1) + " is incorrect.");
        }        
    }
    System.out.println("IP Address: " + firstInput + per + secondInput + per + thirdInput + per + fourthInput);    
}

}

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вы никогда не устанавливаете значения firstInput, secondInput и т. Д.

Если изменить оператор вывода на следующий, он будет работать.

System.out.println("IP Address: " + inputs[0] + per + inputs[1] + per + inputs[2] + per + inputs[3]);
0 голосов
/ 03 октября 2018

Проблема связана с переменной.Вы устанавливаете значения в массиве input, но печатаете переменные firstInput, secondInput ... Поскольку они являются нативными типами, между ними нет ссылок.Вы должны печатать с использованием массива input следующим образом:

System.out.println("IP Address: " + inputs[0] + per + inputs[1] + per + inputs[2] + per + inputs[3]);

Значение, установленное на входах [0], не меняет значение переменной firstInput.

0 голосов
/ 03 октября 2018

запустите этот код и будьте просветлены:

int x = 0;
int[] a = new int[] {x};
x = 1;
System.out.println(a[0]); // What do you think.. does this print 0 or 1?
a[0] = 2;
System.out.println(x); // What do you think.. does this print 1 or 2?

Как только вы поймете, что новый int [] {x};не 'связывает' x и первый слот массива a вместе, и это новое int [] {x};вышеописанное ничем не отличается от new int [] {0}, вы должны выяснить, почему он не работает: вы назначаете пользовательские входы в 4 слота массива input [] и никогда не касаетесьвообще переменная firstInput, пока вы ее не распечатаете, и в этот момент она, очевидно, будет такой же, какой была при создании: 0.

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