Java - 整数输入的累加和在 while 循环中不起作用
Java - cumulative sum of integer input doesnt work in while loop
我无法弄清楚为什么我的代码不起作用。首先,我是 Java 的新手,请多多包涵。
任务是:
编写一个程序,读取一系列整数输入并打印累计总数。如果输入是 1 7 2 9,程序应该打印 1 8 10 19.
package lektion05forb;
import java.util.Scanner;
/**
*
* @author Lars
*/
public class P52LoopsC
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Numbers: ");
double cumulative_sum = 0;
String output_cumulative_sum= "";
while (input.hasNextDouble())
{
double input_number = input.nextDouble();
cumulative_sum += input_number;
output_cumulative_sum += String.format("%s ", String.valueOf(cumulative_sum));
break;
}
input.close();
System.out.println(output_cumulative_sum);
}
}
当我输入像 3 4 5 8 2 这样的数字序列时,它 returns 是 34582,而不是数字的累加和。任何人都可以解释为什么,以及我如何解决它以便 returns 序列的累计总数?
从 while 循环中删除 break
。
你会想要使用do-while
,因为这样,循环将至少执行一次,在你编写的代码中,循环永远不会执行,因为input.hasNextDouble()
为空,因为在初始化后还没有用户输入。(实际上,在扫描器的情况下循环确实执行,但通常被认为是一个糟糕的设计来执行 while-loop 没有隐式定义和初始化的控制变量。)
代码是这样的
do {
double input_number = input.nextDouble();
cumulative_sum += input_number;
output_cumulative_sum += String.format("%s ", String.valueOf(cumulative_sum));
} while (input.hasNextDouble());
此外,永远不要将 break;
放在 while 语句中,这样即使第一个 运行 之后的参数为真,它也只会循环一次,因为你会跳出循环。
这是一个 double
的答案
public static void main(String[]args)
{
Scanner input = new Scanner(System.in);
System.out.print("Numbers: ");
double cumulativeSum = 0;
String line = input.nextLine();
String[] numbers = line.split(" ");
for(String number : numbers){
cumulativeSum += Double.parseDouble(number);
System.out.println(cumulativeSum);
}
input.close();
}
输入:
Numbers: 1 7 2 9
输出:
1.0
8.0
10.0
19.0
这是 Integer
的也许更好的解决方案
public static void main(String[]args)
{
Scanner input = new Scanner(System.in);
System.out.print("Numbers: ");
Integer cumulativeSum = 0;
String line = input.nextLine();
String[] numbers = line.split(" ");
for(String number : numbers){
cumulativeSum += Integer.parseInt(number);
System.out.println(cumulativeSum);
}
input.close();
}
输入:
Numbers: 1 7 2 9
输出:
1
8
10
19
我无法弄清楚为什么我的代码不起作用。首先,我是 Java 的新手,请多多包涵。 任务是: 编写一个程序,读取一系列整数输入并打印累计总数。如果输入是 1 7 2 9,程序应该打印 1 8 10 19.
package lektion05forb;
import java.util.Scanner;
/**
*
* @author Lars
*/
public class P52LoopsC
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Numbers: ");
double cumulative_sum = 0;
String output_cumulative_sum= "";
while (input.hasNextDouble())
{
double input_number = input.nextDouble();
cumulative_sum += input_number;
output_cumulative_sum += String.format("%s ", String.valueOf(cumulative_sum));
break;
}
input.close();
System.out.println(output_cumulative_sum);
}
}
当我输入像 3 4 5 8 2 这样的数字序列时,它 returns 是 34582,而不是数字的累加和。任何人都可以解释为什么,以及我如何解决它以便 returns 序列的累计总数?
从 while 循环中删除 break
。
你会想要使用do-while
,因为这样,循环将至少执行一次,在你编写的代码中,循环永远不会执行,因为(实际上,在扫描器的情况下循环确实执行,但通常被认为是一个糟糕的设计来执行 while-loop 没有隐式定义和初始化的控制变量。)input.hasNextDouble()
为空,因为在初始化后还没有用户输入。
代码是这样的
do {
double input_number = input.nextDouble();
cumulative_sum += input_number;
output_cumulative_sum += String.format("%s ", String.valueOf(cumulative_sum));
} while (input.hasNextDouble());
此外,永远不要将 break;
放在 while 语句中,这样即使第一个 运行 之后的参数为真,它也只会循环一次,因为你会跳出循环。
这是一个 double
public static void main(String[]args)
{
Scanner input = new Scanner(System.in);
System.out.print("Numbers: ");
double cumulativeSum = 0;
String line = input.nextLine();
String[] numbers = line.split(" ");
for(String number : numbers){
cumulativeSum += Double.parseDouble(number);
System.out.println(cumulativeSum);
}
input.close();
}
输入:
Numbers: 1 7 2 9
输出:
1.0
8.0
10.0
19.0
这是 Integer
public static void main(String[]args)
{
Scanner input = new Scanner(System.in);
System.out.print("Numbers: ");
Integer cumulativeSum = 0;
String line = input.nextLine();
String[] numbers = line.split(" ");
for(String number : numbers){
cumulativeSum += Integer.parseInt(number);
System.out.println(cumulativeSum);
}
input.close();
}
输入:
Numbers: 1 7 2 9
输出:
1
8
10
19