【发布时间】:2018-04-22 13:45:36
【问题描述】:
我在我的 Java 类中有一个问题要做,它要求我编写一个程序,从用户那里获取 n 个数字并输出它们的平均值。我知道我可以做一个更简单的方法,只需要求用户输入他在开始时需要输入的值的数量,但我想创建程序,这样用户就不必知道开头的值的数量。 因此,为此,我在 for 循环中创建了一个长度为 100 的数组(希望涵盖用户需要输入的数量)(在循环后将该 100 长度的数组呈现为空,因此程序不会变得太占用内存)和在每次迭代中运行一个计数器。一旦用户输入 stop ,循环结束,输入到 100 长度数组中的值被传输到一个计数大小的数组中。 代码如下:
import java.util.*;
import java.lang.*;
public class main
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
//Question 1
System.out.println("Enter your numbers. (Enter 'Stop' when you're done)");
int temp = 0;
String uInput = "";
char stopper;
int count = 0;
double total = 0;
int a = 0;
boolean inStop = true;
for (boolean stop = false; stop != true;)
{
int array [] = new int [100];
if (inStop == true)
{
System.out.println("point 5");
System.out.print("Input: ");
uInput = input.nextLine(); //reads user input
}
try //empty input repeater
{
System.out.println("point 1");
try //dealing with letters in string instead of numbers
{
System.out.println("point 2");
temp = Integer.parseInt(uInput); //converts string to int
array[count] = temp;
count++;
System.out.println(inStop);
if (inStop == false) //executes when stop has been reached
{
System.out.println("point 3");
int numberArray [] = new int [count]; //fills final array
for (int i = 0; i < count; i++)
{
numberArray[i] = array[i];
}
for (a = 0; a < numberArray.length; a++)
{
total = total + numberArray[a];
}
total = total / a;
stop = true; //ends parent loop
}
}
catch (NumberFormatException e) //catches letters in string and checks for stop
{
System.out.println("point 4");
stopper = uInput.charAt(0);
stopper = Character.toUpperCase(stopper);
if (stopper == 'S')
{
inStop = false;
System.out.println("point 6");
}
}
}
catch (StringIndexOutOfBoundsException e)
{
}
}
System.out.println("The average of the values entered is: " + total + ".");
}
}
问题是,正如您所看到的,有许多带编号的打印输出(对我来说)表明程序当前的位置。一切运行良好,除了第 3 点。第 3 点由于某种原因无法执行。不管我做什么。现在,问题出在第 34 行,temp = Integer.valueOf(uInput); //converts string to int
如果我在该行之后直接输入打印功能,则该位置不会打印到屏幕上。我相信那部分没有语法或逻辑错误,我的讲师也是如此,但是代码仍然没有执行并且程序在之后无限循环。该行中的某些东西破坏了 temp 或 uInput ,我们无法弄清楚是什么。我已经通过与我最初使用的编译器不同的编译器编译并运行了代码,甚至在命令提示符中尝试了相同的结果(因此它不是导致问题的 IDE)。
我们可能错过的任何见解将不胜感激。谢谢。
p.s.:不要敲我的讲师,他没有写代码,而且不是那么容易阅读。如果不是因为我的解释或他对我的程序运行方式的解释有任何错误,他可以很容易地知道问题出在哪里。
【问题讨论】:
-
"不管我做什么" 好吧,你做什么做什么?你给它的输入是什么?
-
提示:在编写接受用户输入并在稍后快速结束的程序时... 绝对无需担心内存问题。尤其是当您的优化策略基于一厢情愿(并且与现实无关)时。
-
只是数字。通常是 1、2、3、4 和停止,因为我知道答案应该是什么。 (2.5)
-
您只将
inStop设置为true。inStop == false永远不会是真的。 -
一旦
inStop == false,uInput将不再变化,并且始终等于“停止”,因此Integer.valueOf(uInput)将始终抛出NumberFormatException。
标签: java arrays string parseint