在For循环(Java)中初始化变量

时间:2018-10-02 23:14:13

标签: java for-loop variables initialization

我需要创建一个程序,该程序需要用户输入4个整数,并确保输入是否介于0和255之间(不包括)。除了我的最终输出(几乎所有输入都在一个字符串中)的IP地址之外,一切都正常。它一直输出0,因为在数组中使用变量之前必须先初始化变量,因此我为它们分配了0值。但是,该值在for循环中应该已更改,但是它仍然输出不正确的值。我只能打印一次IP地址,并且必须在末尾。我知道有一个更简单的方法可以执行此操作,但是我仍然想知道如何解决此问题以供将来参考。以下是我的代码:

导入java.util.Scanner;

主类{

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 :(得分:0)

运行以下代码并得到启发:

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}没什么不同,您应该能够弄清楚它为什么不起作用:您正在将用户输入分配到inputs []数组的4个插槽中,并且永远不要触摸完全是firstInput变量,直到您打印出来为止,这时它显然仍然是创建时的状态:0。

答案 1 :(得分:0)

您永远不会设置firstInput,secondInput等的值。

如果将输出语句更改为以下内容,则它会起作用。

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

答案 2 :(得分:0)

问题出在变量引用上。您正在输入数组中设置值,但是打印变量firstInput,secondInput...。因为它们是本机类型,所以它们之间没有引用。您应该使用输入数组进行打印,如下所示:

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

在输入[0]上设置的值不会更改firstInput变量上的值。