2013-09-22 54 views
0

我要说实话,我一直在做一个任务,我比BEYOND卡住了。我正在创建一个简单的Java applet,可以让用户输入10个数字。该程序清理输入,确保只输入一个数字,并且该数字必须介于0和9之间。寻找最高的10

至今没有问题。使用给定的例子,在网络上搜索正确的语法和逻辑。我的代码编译没有抱怨。然而,一旦我尝试了我的第一个号码,只要它的有效输入,我的程序刚起来,并告诉我刚输入的号码是最大的,并且不等待输入10个号码。

我的猜测是我有一半的applet程序,并且我没有输出正确的,或者我的循环中有什么错误,但逻辑看起来不错。

差点忘了提。我不知道如何在applet中输出文本,任何帮助都很棒,但它不是我最关心的问题。

我当前的代码:

import java.awt.*; 
import java.applet.*; 
import java.awt.event.*; 
import javax.swing.JOptionPane; 

public class largest extends Applet implements ActionListener{ 
private static final long serialVersionUID = 1L; 


//Create components for Applet 
Label numberLabel = new Label("Enter a number:"); 
TextField numberField = new TextField(10); // Sets the size of the text field, You still may type as much data into the field that you want, input will need to be sanitized later 

Label topNumberLabel = new Label("The top number is:"); 
Button calcButton = new Button("Ok"); 
public void init() 
{ 
    // Add controls to the applet window 
    add(numberLabel); 
    add(numberField); 
    add(topNumberLabel); 
    add(calcButton); 
    calcButton.addActionListener(this); 
    setSize(300, 200); // Sets the size of the applet window 
} 

public void actionPerformed(ActionEvent e) { 
    // Variables for counting, user input, and storage for largest number 
    double counter = 0; 
    double number = 0; 
    double largest = 0; 

    // Allows user to input 10 times 
    while (counter<10) 
    { 
     try { //Sanitize user input, make sure input entered is a number 
      number = Double.parseDouble(numberField.getText()); 
     } catch (NumberFormatException ex) { 
      numberField.requestFocus(); 
      JOptionPane.showMessageDialog(null, "Input invalid, please enter an integer", 
        "///-D-A-T-A---E-R-R-O-R-\\\\\\", JOptionPane.ERROR_MESSAGE); 
      return; 
     } 
     if (number < 0 || number > 9) { //Sanitize user input, make sure the given number is between 0 and 9 
      numberField.requestFocus(); 
      JOptionPane.showMessageDialog(null, 
        "The number entered must be between 0 and 9", 
        "///-D-A-T-A---E-R-R-O-R-\\\\\\", JOptionPane.ERROR_MESSAGE); 
      return; 
     } 
     counter++; 

    // Determine what the largest number entered is by comparing to a baseline 
    // of previous numbers or zero if just beginning loop 
    if (number > largest)largest=number; 

    } 

     // Display's the largest number that got entered by user 
     JOptionPane.showMessageDialog(null," The largest number entered was " + largest); 
    } 

}

+1

你只读了10次相同的数字。当按钮被点击时,你的'actionPerformed'方法运行并循环10次读取相同的数字。我还建议你不要在Applet类中扩展ActionListener,这会破坏OO。你应该使用匿名类。你也可以阅读[this](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/)。请特别注意“无人使用AWT”部分... –

+1

您的问题是您的'while'循环在您的'actionPerformed'方法内。所以你只需循环一遍,只需一个动作。当你循环10次后,当然你的循环会退出并显示结果。考虑如何做到这一点_无循环。 –

+0

我必须使用循环。部分任务。我原来的解决方案是由于这个使用数组,只是循环通过一个数组,但已经抛出。 –

回答

0

按照预期,您正在循环10次,但每次只需要getText()即可获得该字段的值。这不会等待用户更改号码,因此所有10个号码都是相同的。您必须将counterlargest定义为字段,并且每次调用actionPerformed时都会更改。这里的代码:

import java.awt.*; 
import java.applet.*; 
import java.awt.event.*; 
import javax.swing.JOptionPane; 

public class largest extends Applet implements ActionListener{ 
    private static final long serialVersionUID = 1L; 

    private int counter = 0; // These are the variables 
    private double largest = 0; // from actionPerformed(). 

    // ... 

    public void actionPerformed(ActionEvent e) { 
     // Variable for user input 
     double number = 0; 

     try { //Sanitize user input, make sure input entered is a number 
      number = Double.parseDouble(numberField.getText()); 
     } catch (NumberFormatException ex) { 
      numberField.requestFocus(); 
      JOptionPane.showMessageDialog(null, 
        "Input invalid, please enter an integer", 
        "///-D-A-T-A---E-R-R-O-R-\\\\\\", 
        JOptionPane.ERROR_MESSAGE); 
      return; 
     } 
     if (number < 0 || number > 9) { //Sanitize user input, make sure the given number is between 0 and 9 
      numberField.requestFocus(); 
      JOptionPane.showMessageDialog(null, 
        "The number entered must be between 0 and 9", 
        "///-D-A-T-A---E-R-R-O-R-\\\\\\", 
        JOptionPane.ERROR_MESSAGE); 
      return; 
     } 
     counter++; 
     // Determine what the largest number entered is by comparing to a baseline 
     // of previous numbers or zero if just beginning loop 
     if (number > largest)largest=number; 
     // Allows user to input 10 times 
     if (counter==10) 
     { 
      // Display's the largest number that got entered by user 
      JOptionPane.showMessageDialog(null, 
        "The largest number entered was " + largest); 
     } 
    } 
} 
+0

毫米,double和int转换错误。使我的变量加倍。你添加的代码使它告诉我,我输入的第一个数字是最大的,并且让我在此之后无限次地输入数字。要去做计数器和最大的场地,就像你说的那样 –

+0

@FustratedSyntax好的,修正了这个问题,只是把'最大'变成'double':)但是,counter应该仍然是int,消耗更少的内存并且没有舍入错误。 – Pietu1998

+0

好的。老实说,我是一个noob在这个,我怎么做最大和数字字段?您添加的代码不允许我继续添加数字:/ –

0

这是因为该行

number = Double.parseDouble(numberField.getText()); 

是只要您已在该领域的一些做10次,你在循环结束之前,没有时间去改变字段中的数字。

+1

并非完全如此。 “ActionListener”被附加到按钮上。 –

+0

是的,这是真的,并遵循“number = Double.parseDouble(numberField.getText());”被做了10次。 – Magnus