数组中的变量未在 Java 中更新其值
Variable inside array not updating its value in Java
我正在研究 FizzBuzz 问题,并决定使用数组将前 15 个结果存储在数组中,然后遍历它。但是如果稍后在循环中更新,存储在数组中的变量不会更新其值
import java.util.Scanner;
public class FizzBuzz {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc= new Scanner(System.in);
System.out.println("Enter the number");
int Num= sc.nextInt();
String F= "Fizz";
String B= "Buzz";
String FB= "FizzBuzz";
String I="";
String arr[]= {FB, I, I, F, I, B, I, I, I, F, B, I, F, I, I};
for (int j = 1; j <= Num; j++) {
I = Integer.toString(j);
System.out.println(arr[j%15]);
}
}
}
变量 I 不会在 for 循环中更改其值。它只是在 I 变量的结果中打印空格。帮助 !
P.S:对于简单的 soln,这是一个很好的实现吗?
变量没有更新的原因如下:
如果你创建一个局部变量,比如这里的 String I = ...
,并将它传递给一个数组,它将作为变量的实例存储在那里。如果您更改字符串(或字符串的值),则实例会更改。所以一个字符串被认为是一个实例。如果你创建一个新的字符串,你会自动创建一个新的实例——(String s =) new String(...)
等同于改变变量 s = "..."
。您可以为字符串编写一个包装器,其中字符串值是“可变的”,即可以更改,而不更改数组中传递的实际实例。
您还可以更改代码,而无需包装器:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number");
int num = sc.nextInt();
String f = "Fizz";
String b = "Buzz";
String fb = "FizzBuzz";
String i = "";
String[] arr = {fb, i, i, f, i, b, i, i, i, f, b, i, f, i, i};
for (int j = 1; j <= num; j++) {
int index = j % 15;
//local constant to check for equality to the i-variable
final String pos = arr[index];
String strToInt = Integer.toString(j);
//Check for equality to the "i"-variable
if (pos.equals(i)) {
arr[index] = strToInt;
}
//Changing the i-instance to the strToInt instance
i = strToInt;
//Printing your result
System.out.println(arr[index]);
}
}
我还将变量名称更改为有效名称,如 JNC(Java 命名约定)所述。
此致,
文森特
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number");
int num = sc.nextInt();
String f = "Fizz";
String b = "Buzz";
String fb = "FizzBuzz";
String i = "";
String[] arr = {fb, i, i, f, i, b, i, i, i, f, b, i, f, i, i};
String indexValue;
for (int j = 1; j <= num; j++) {
indexValue = arr[j % 15];
System.out.println(indexValue.equals(i) ? j : indexValue);
}
}
}
我正在研究 FizzBuzz 问题,并决定使用数组将前 15 个结果存储在数组中,然后遍历它。但是如果稍后在循环中更新,存储在数组中的变量不会更新其值
import java.util.Scanner;
public class FizzBuzz {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc= new Scanner(System.in);
System.out.println("Enter the number");
int Num= sc.nextInt();
String F= "Fizz";
String B= "Buzz";
String FB= "FizzBuzz";
String I="";
String arr[]= {FB, I, I, F, I, B, I, I, I, F, B, I, F, I, I};
for (int j = 1; j <= Num; j++) {
I = Integer.toString(j);
System.out.println(arr[j%15]);
}
}
}
变量 I 不会在 for 循环中更改其值。它只是在 I 变量的结果中打印空格。帮助 !
P.S:对于简单的 soln,这是一个很好的实现吗?
变量没有更新的原因如下:
如果你创建一个局部变量,比如这里的 String I = ...
,并将它传递给一个数组,它将作为变量的实例存储在那里。如果您更改字符串(或字符串的值),则实例会更改。所以一个字符串被认为是一个实例。如果你创建一个新的字符串,你会自动创建一个新的实例——(String s =) new String(...)
等同于改变变量 s = "..."
。您可以为字符串编写一个包装器,其中字符串值是“可变的”,即可以更改,而不更改数组中传递的实际实例。
您还可以更改代码,而无需包装器:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number");
int num = sc.nextInt();
String f = "Fizz";
String b = "Buzz";
String fb = "FizzBuzz";
String i = "";
String[] arr = {fb, i, i, f, i, b, i, i, i, f, b, i, f, i, i};
for (int j = 1; j <= num; j++) {
int index = j % 15;
//local constant to check for equality to the i-variable
final String pos = arr[index];
String strToInt = Integer.toString(j);
//Check for equality to the "i"-variable
if (pos.equals(i)) {
arr[index] = strToInt;
}
//Changing the i-instance to the strToInt instance
i = strToInt;
//Printing your result
System.out.println(arr[index]);
}
}
我还将变量名称更改为有效名称,如 JNC(Java 命名约定)所述。
此致,
文森特
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number");
int num = sc.nextInt();
String f = "Fizz";
String b = "Buzz";
String fb = "FizzBuzz";
String i = "";
String[] arr = {fb, i, i, f, i, b, i, i, i, f, b, i, f, i, i};
String indexValue;
for (int j = 1; j <= num; j++) {
indexValue = arr[j % 15];
System.out.println(indexValue.equals(i) ? j : indexValue);
}
}
}