[英]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.