在 java 中的 while 循环外使用变量
Using variables outside while loops in java
我正在尝试在 Java 中编写一个程序,该程序在一个数组中收集用户最喜欢的名字,然后在最后打印这些名字。
注意:数组的长度应由用户输入的名称数来定义。
请看一下代码并告诉我如何修复它。这是我到目前为止所做的
Scanner input = new Scanner(System.in);
System.out.println("What are your most favorite names?");
String[] favNames = new String[i];
int i = 1;
while (true){
System.out.print("Please enter favorite name number" + i + ": ");
favNames[i-1] = input.next();
System.out.print("Is that all?");
String ans = input.next().toLowerCase();
if(ans.startsWith("y")){
System.out.print("Here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
break;
}
i++;
}
这是我得到的错误代码:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
symbol: variable i
location: class JavaApplication13
at JavaApplication13.main(JavaApplication13.java:52)
Java Result: 1
我尝试将代码的第一部分移到循环内,但它只打印用户输入的其中一个名称。
//These parts:
String[] favNames = new String[i];
int i = 1;
如果我交换第一行和第二行之间的位置。该数组仅从用户那里获得 1 个条目。
//Only gets one entry
int i = 1;
String[] favNames = new String[i];
只需将 i++ 移动到 while 循环内,一切都很好!
变量应该在使用前声明。这就是您的程序无法运行的原因。
改变
String[] favNames = new String[i];
int i = 1;
到
int i = 1;
String[] favNames = new String[i];
但是,请记住,在这种情况下,使用的只能输入1次(因为数组具有固定大小)。如果你想使用任意数量的输入,你必须使用 ArrayList
或类似的类型。
- 在使用之前声明变量:
int i = 1;
String[] favNames = new String[i];
但是,大小为 1 的数组只能用于 1 个条目。如果您希望用户能够输入更多内容,则需要更大的数组。
我会建议任意大的大小(比如 100),然后检查条目是否适合数组;如果没有,游戏结束。
String[] favNames = new String[100];
int i = 1;
while (true) {
System.out.print("Please enter favorite name number" + i + ": ");
favNames[i - 1] = input.next();
System.out.print("Is that all?");
String ans = input.next().toLowerCase();
if (ans.startsWith("y")) {
System.out.print("Here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
break;
}
i++;
if (i > favNames.length)
System.out.print("Can't accept more than "+favNames.length+" entries, here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
}
那么问题是 Arrays.toString
将为空条目打印 null
。
我会创建一个自定义例程来打印以第一个 null 结尾的数组:
static String printFavNames(String[] favNames) {
String output = "[";
for (String s : favNames) {
if (s==null)
break;
if (output.length() > 1)
output += ", ";
output += s;
}
output += "]";
return output;
}
相关问题:How to print all non null elements of an array using Array.toString()
完整代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("What are your most favorite names?");
String[] favNames = new String[100];
int i = 1;
while (true) {
System.out.print("Please enter favorite name number" + i + ": ");
favNames[i - 1] = input.next();
System.out.print("Is that all?");
String ans = input.next().toLowerCase();
if (ans.startsWith("y")) {
System.out.print("Here is the completed list of your favorite names:\n" + printFavNames(favNames));
break;
}
i++;
if (i > favNames.length)
System.out.print("Can't accept more than "+favNames.length+" entries, here is the completed list of your favorite names:\n" + printFavNames(favNames));
}
input.close();
}
static String printFavNames(String[] favNames) {
String output = "[";
for (String s : favNames) {
if (s==null)
break;
if (output.length() > 1)
output += ", ";
output += s;
}
output += "]";
return output;
}
}
我正在尝试在 Java 中编写一个程序,该程序在一个数组中收集用户最喜欢的名字,然后在最后打印这些名字。
注意:数组的长度应由用户输入的名称数来定义。
请看一下代码并告诉我如何修复它。这是我到目前为止所做的
Scanner input = new Scanner(System.in);
System.out.println("What are your most favorite names?");
String[] favNames = new String[i];
int i = 1;
while (true){
System.out.print("Please enter favorite name number" + i + ": ");
favNames[i-1] = input.next();
System.out.print("Is that all?");
String ans = input.next().toLowerCase();
if(ans.startsWith("y")){
System.out.print("Here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
break;
}
i++;
}
这是我得到的错误代码:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
symbol: variable i
location: class JavaApplication13
at JavaApplication13.main(JavaApplication13.java:52)
Java Result: 1
我尝试将代码的第一部分移到循环内,但它只打印用户输入的其中一个名称。
//These parts:
String[] favNames = new String[i];
int i = 1;
如果我交换第一行和第二行之间的位置。该数组仅从用户那里获得 1 个条目。
//Only gets one entry
int i = 1;
String[] favNames = new String[i];
只需将 i++ 移动到 while 循环内,一切都很好!
变量应该在使用前声明。这就是您的程序无法运行的原因。
改变
String[] favNames = new String[i];
int i = 1;
到
int i = 1;
String[] favNames = new String[i];
但是,请记住,在这种情况下,使用的只能输入1次(因为数组具有固定大小)。如果你想使用任意数量的输入,你必须使用 ArrayList
或类似的类型。
- 在使用之前声明变量:
int i = 1;
String[] favNames = new String[i];
但是,大小为 1 的数组只能用于 1 个条目。如果您希望用户能够输入更多内容,则需要更大的数组。
我会建议任意大的大小(比如 100),然后检查条目是否适合数组;如果没有,游戏结束。
String[] favNames = new String[100];
int i = 1;
while (true) {
System.out.print("Please enter favorite name number" + i + ": ");
favNames[i - 1] = input.next();
System.out.print("Is that all?");
String ans = input.next().toLowerCase();
if (ans.startsWith("y")) {
System.out.print("Here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
break;
}
i++;
if (i > favNames.length)
System.out.print("Can't accept more than "+favNames.length+" entries, here is the completed list of your favorite names:\n" + Arrays.toString(favNames));
}
那么问题是 Arrays.toString
将为空条目打印 null
。
我会创建一个自定义例程来打印以第一个 null 结尾的数组:
static String printFavNames(String[] favNames) {
String output = "[";
for (String s : favNames) {
if (s==null)
break;
if (output.length() > 1)
output += ", ";
output += s;
}
output += "]";
return output;
}
相关问题:How to print all non null elements of an array using Array.toString()
完整代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("What are your most favorite names?");
String[] favNames = new String[100];
int i = 1;
while (true) {
System.out.print("Please enter favorite name number" + i + ": ");
favNames[i - 1] = input.next();
System.out.print("Is that all?");
String ans = input.next().toLowerCase();
if (ans.startsWith("y")) {
System.out.print("Here is the completed list of your favorite names:\n" + printFavNames(favNames));
break;
}
i++;
if (i > favNames.length)
System.out.print("Can't accept more than "+favNames.length+" entries, here is the completed list of your favorite names:\n" + printFavNames(favNames));
}
input.close();
}
static String printFavNames(String[] favNames) {
String output = "[";
for (String s : favNames) {
if (s==null)
break;
if (output.length() > 1)
output += ", ";
output += s;
}
output += "]";
return output;
}
}