簡體   English   中英

在For循環(Java)中初始化變量

[英]Initializing variables in For Loops (Java)

我需要創建一個程序,該程序需要用戶輸入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);    
}

}

運行以下代碼並得到啟發:

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。

您永遠不會設置firstInput,secondInput等的值。

如果將輸出語句更改為以下內容,則它可以工作。

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

問題出在可變參考上。 您正在輸入數組中設置值,但是打印變量firstInput,secondInput...。因為它們是本機類型,所以它們之間沒有引用。 您應該使用輸入數組進行打印,如下所示:

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

輸入[0]上設置的值不會更改firstInput變量上的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM