[英]Java Integer.parseInt() breaks program
我在Java类中有一个问题要解决,它要求我编写一个程序,该程序接收用户的n个数字并输出它们的平均值。 我知道我可以用一种更简单的方法来完成此工作,只需要求用户输入开始时需要输入的值的数量即可,但是我想创建该程序,因此用户不必一定要知道开头的值数。 因此,为此,我在for循环内创建了一个100长度的数组(希望可以覆盖用户需要输入的数量)(在循环后将100长度的数组呈现为空,这样程序就不会变得太占用内存)每次迭代都运行一个计数器槽。 一旦用户进入停止位置,循环就结束了,并且输入到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 = Integer.valueOf(uInput); //converts string to int
如果我在该行之后直接插入打印函数,则该位置不会打印到屏幕上。 我相信该部分没有语法或逻辑错误,我的讲师也没有,但是代码仍然无法执行,并且程序随后无限循环。 某一行中断了temp或uInput,我们无法弄清楚是什么。 我已经使用与最初使用的编译器不同的编译器编译并运行了代码,甚至在命令提示符中尝试了相同的结果(因此不是由IDE引起问题)。
我们可能错过的任何见解将不胜感激。 谢谢。
ps:请不要敲我的讲师,他没有写代码,而且它也不容易阅读。 如果我的解释或他对我的程序的运行方式的解释没有错误,他可以很容易地知道问题出在哪里。
我认为您在确定问题时遇到问题的原因是由于您的代码结构。
您已经将告知使用的逻辑与读取输入并进行计算的逻辑混合在一起。
如果您的主要方法仅处理通知用户的问题,并依靠另一种方法来计算平均值,而另一种方法则是读取用户的输入,则所有内容都将更易于阅读,理解并看到您将“ stop”解析为一个int。
public static void main(String[] args) {
System.out.println("instructions");
int[] all = readUserInputs();
double ave = calculateAverage(all);
System.out.println("message " + ave);
}
private static double calculateAverage(int[] numbers) {
// I will leave it to you to fill this out
return yourValue;
}
private static String readUserInputs() {
Scanner input;// as above
int[] values; // is an array best? What about a List?
for (int i = 0; ; i++) {
String line = input.nextLine();
if ("stop".equals(line) {
break;
}
//try to parse and put into array/list
}
return values;
}
希望您会发现它更易于阅读和使用,我为您留出了一些空白。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.