我最近被分配了一个功课,用不同的语言编写代码,这是我在python中使用的唯一语言。我的代码应该做的是询问用户输入,然后首先将其设置为高,低并开始计算平均值。
public Form1()
{
InitializeComponent();
int x = 100;
int y = 0;
// create 361 labels, set their dimensions
for (int i = 0; i < 361; i++)
{
board[i] = new Label();
board[i].Parent = pictureBox1;
board[i].Location = new Point(x, y);
board[i].Name = "label" + i;
board[i].Width = 55;
board[i].Height = 55;
board[i].Text = "0";
board[i].BackColor = Color.Black;
board[i].BringToFront();
}
// set the position of the label
foreach (Label i in board)
{
if (x >= 580)
{
x = 0;
y = y + i.Height + 55;
}
i.Location = new Point(x, y);
this.Controls.Add(i);
x += i.Width;
}
我现在遇到的问题是它遍历整个循环而不是重新分配用户输入。这可能与我的{}有关,但我不确定。
答案 0 :(得分:0)
由于此代码中存在大量受损的编码约定和最佳实践,因此我将忽略其中大部分内容并专注于您的案例中重要的内容:
static int User_input = 0;
,然后在循环中定义了一个具有相同名称的变量,它隐藏了静态变量并存储了用户输入。但是,它是在while
条件中检查的静态变量。else;
基本上什么都不做,因为它包含一个空语句。然后你总是执行剩下的循环。以下是“固定”代码:
public class HGP1316 {
static int Running_total = 0;
static double Average = 0.0;
static int User_input = 0;
static double counter = 0.0 ;
static int Highest_input = -1;
static int Lowest_input = -1;
public static void main(String[] args) {
{
System.out.println("This program will give you the highest, lowest, and average of the integers you \n"
+ "enter. To end enter a negative number ");
}
Scanner user_input = new Scanner( System.in );
while (User_input >= 0) {
System.out.print("Please enter an integer: ");
User_input = user_input.nextInt();
if (User_input >= 0)
{
Running_total = Running_total + User_input;
counter = counter + 1;
if (counter == 1)
{
Highest_input = User_input;
Lowest_input = User_input;
}
if (User_input > Highest_input)
{
Highest_input = User_input;
}
if (User_input < Lowest_input)
{
Lowest_input = User_input;
}
} else {
Average = (Running_total / counter);
System.out.println ("The Highest value entered was : "+ Highest_input);
System.out.println ("The Lowest value entered was : " + Lowest_input);
System.out.println("The Average of enteries was : "+ Average);
}
}
user_input.close();
}
}
答案 1 :(得分:0)
在Java中,您可以对局部变量和类变量使用相同的变量名。对于局部变量和字段也是如此。
你有一个局部变量
Integer User_input;
和一个类变量
static int User_input = 0;
在while条件中,您使用的是类变量,它始终为0。 您的示例中不需要类变量 - 仅使用局部变量。
轻松检查:您可以使用类名(HGP1316.User_input)预先添加类变量 - 代码将正确编译。
详细了解class variables。
答案 2 :(得分:0)
您的代码存在一些问题。首先,您的变量名称非常相似,因此调试起来很困难。其次,您的变量User_input
不应该是Integer
对象的实例,它应该是int
这样的原语:static int User_input = 0
第三,在while循环的每次迭代中重新创建扫描程序变量user_input
。扫描仪应该在循环之前一次声明:
Scanner input_scanner = new Scanner(System.in);
while (...)
{
// get user input
}
第四,进行while循环检查是User_input >= 0
并且使用if语句检查同样的事情是多余的。相反,做......
Scanner input_scanner = new Scanner(System.in);
while (input_scanner.hasNext())
{
System.out.print("Please enter an integer: ");
User_input = input_scanner.nextInt();
if (User_input >= 0)
{
// hanlde input
}
}
第五,即使计数器为零,检查后的if语句仍然使用,这是不必要的。要解决此问题,请使用else if
和else
语句,如下所示:
if (counter == 1)
{
Highest_input = User_input;
Lowest_input = User_input;
}
else if (User_input > Highest_input)
{
Highest_input = User_input;
}
else if (User_input < Lowest_input)
{
Lowest_input = User_input;
}
第六,当用户输入负数时,您需要最终摆脱循环,目前,您只是不在平均值计算中包含该数字,但您的while循环仍在运行! (还有一个语法错误:else;
应该是else
)。
else
{
Average = (Running_total / counter);
System.out.println ("The Highest value entered was : "+ Highest_input);
System.out.println ("The Lowest value entered was : " + Lowest_input);
System.out.println("The Average of enteries was : "+ Average);
break;
}
第七,最后,您需要关闭扫描仪:input_scanner.close()
以上是您完成上述所有修复后的最终工作代码:
static int Running_total = 0;
static double Average = 0.0;
static int User_input = 0;
static double counter = 0.0 ;
static int Highest_input = -1;
static int Lowest_input = -1;
public static void main(String[] args) {
System.out.println("This program will give you the highest, lowest, and average of the integers you \n"
+ "enter. To end enter a negative number ");
Scanner input_scanner = new Scanner( System.in );
while (input_scanner.hasNext())
{
System.out.print("Please enter an integer: ");
User_input = input_scanner.nextInt();
if (User_input >= 0)
{
Running_total = Running_total + User_input;
counter = counter + 1;
if (counter == 1)
{
Highest_input = User_input;
Lowest_input = User_input;
}
else if (User_input > Highest_input)
{
Highest_input = User_input;
}
else if (User_input < Lowest_input)
{
Lowest_input = User_input;
}
}
else
{
Average = (Running_total / counter);
System.out.println ("The Highest value entered was : "+ Highest_input);
System.out.println ("The Lowest value entered was : " + Lowest_input);
System.out.println("The Average of enteries was : "+ Average);
break;
}
}
input_scanner.close();
}