我创建了一个程序,它使用扫描程序向用户询问int值,直到它们插入-1,这使得程序停止接收数字。完成后,它将添加用户输入的所有值。到目前为止,这是我的代码:
public static void main(String[] args)
{
int sum = 0, value, count = 0;
Scanner scan = new Scanner (System.in);
System.out.print ("Enter an integer (-1 to quit): ");
value = scan.nextInt();
String string = Integer.toString(value);
while (value != -1)
{
count = count + 1;
sum = sum + value;
System.out.print("Enter an integer (-1 to quit): ");
value = scan.nextInt();
string = Integer.toString(value);
}
System.out.println ();
if (count == 0)
System.out.println ("No values were entered.");
else
{
System.out.println("Number entered: " + string + ",");
System.out.println ("The sum is " + sum);
}
}
我希望输出看起来像这样:
Entered numbers: 1,2,3,4,5 //example of number the user might enter
The sum is 15
我想使用String来为我提供输入数字的集合,但它只给我输入的最后一个值。这是-1,因为这是为了停止程序而必须输入的数字。
我该如何解决这个问题?
答案 0 :(得分:4)
在你的
中while(value != -1){
...
string = Integer.toString(value);
}
您正在用新值替换string
值,因此丢失旧值。您应该为以前存储的值添加新值。所以你的代码看起来像
string = string + "," + value;
您还应该在处理value
-1
之前放置此代码。
string + "," + value
正在创建新的字符串。这样的字符串将需要复制其他块的内容。在长串的情况下,这可能是非常低效的。为了优化这一点,我们可以在循环中使用StringBuilder
和append
个新部分。
在Java 8中,我们也可以使用StringJoiner
,它可以为我们自动添加前缀,分隔符和后缀。
答案 1 :(得分:0)
只需使用string += "," + Integer.toString(value);
这将为您提供以逗号分隔的列表,其中列出了您输入的所有值。您当前的语句string = Integer.toString(value);
会导致变量字符串重置为每次迭代的字符串表示“value”。
答案 2 :(得分:0)
检查此代码。
public static void main(String[] args)
{
int sum = 0, value, count = 0;
Scanner scan = new Scanner (System.in);
System.out.print ("Enter an integer (-1 to quit): ");
value = scan.nextInt();
StringBuilder sb = new StringBuilder();
while (value != -1)
{
if(sb.length() == 0){
sb.append(value);
}else{
sb.append(","+value);
}
count = count + 1;
sum = sum + value;
System.out.print("Enter an integer (-1 to quit): ");
value = scan.nextInt();
}
System.out.println ();
if (count == 0)
System.out.println ("No values were entered.");
else
{
System.out.println("Number entered: " + sb.toString());
System.out.println ("The sum is " + sum);
}
}