【问题标题】:Create a condition on a for (Array - java)在 for (Array - java) 上创建条件
【发布时间】:2017-05-21 07:36:49
【问题描述】:

我想为变量“int edad”创建一个条件,但我很困惑......

我特别需要这条线的条件

Integer.parseInt(JOptionPane.showInputDialog("Ingrese edad")),

这是一个 int 变量,我想验证它在 0 到 100 之间,然后给用户一条消息并再次询问这个变量。

package pruebas;

import javax.swing.JOptionPane;

public class Persona {

public static void main(String[] args) {
    Estudiante [] misEstudiantes2 = new Estudiante[1];

    for(int i = 0; i< misEstudiantes2.length; i++){

        misEstudiantes2[i] = new Estudiante(JOptionPane.showInputDialog("Ingrese nombre").toUpperCase(), 
           Integer.parseInt(JOptionPane.showInputDialog("Ingrese edad")),
           JOptionPane.showInputDialog("Ingrese carrera"),
           Integer.parseInt(JOptionPane.showInputDialog("Ingrese año")),
           Integer.parseInt(JOptionPane.showInputDialog("Ingrese mes")),
           Integer.parseInt(JOptionPane.showInputDialog("Ingrese dia")),
           Double.parseDouble(JOptionPane.showInputDialog("Ingrese sueldo")));

        misEstudiantes2[i].estableceSueldo(1);

        System.out.println("Objetos del array \n" + misEstudiantes2[i].dameNombre() + "\n" + misEstudiantes2[i].dameSueldo() + "\n" +
        misEstudiantes2[i].dameCarrera() + "\n" + misEstudiantes2[i].dameFecha() + "\n" + "La edad es " + misEstudiantes2[i].dameEdad());
    }
}
}

【问题讨论】:

  • 欢迎来到stackoverflow!请在问题代码中也使用英文。人们部分地用你的母语回复,这很好,但可能对其他读者没有用。如果您愿意,还有其他几个语言版本的 stackoverflow:meta.stackoverflow.com/a/297734/360211

标签: java arrays swing conditional


【解决方案1】:

如果您在构造新的学生对象之前将所有用户输入存储到变量中,这是可能的。

String name = JOptionPane.showInputDialog("Ingrese nombre").toUpperCase();
int age = Integer.parseInt(JOptionPane.showInputDialog("Ingrese edad"));
String career = JOptionPane.showInputDialog("Ingrese carrera");
int year = Integer.parseInt(JOptionPane.showInputDialog("Ingrese año"));
int month = Integer.parseInt(JOptionPane.showInputDialog("Ingrese mes"));
int day = Integer.parseInt(JOptionPane.showInputDialog("Ingrese dia"));
double salary = Double.parseDouble(JOptionPane.showInputDialog("Ingrese sueldo")));

misEstudiantes2[i] = new Estudiante(name, age, career, year, month, day, salary);

从这里,您可以对变量进行任何必要的检查。例如:

int age = Integer.parseInt(JOptionPage.showInputDialog("Ingrese edad"));
while (age < 0 || age > 100) { // in case they put in an invalid number
                               // try again, with a notice about the range
    age = Integer.parseInt(JOptionPage.showInputDialog("Ingrese edad, mas de 0 y menos de 100"));
}

【讨论】:

    【解决方案2】:

    尝试编写一种方法来为您做到这一点。例如:

    public static Integer promptForInteger(int min, int max, String message, String message2) {
      Integer result = Integer.parseInt(JOptionPane.showInputDialog(message));
      while(result < min || result > max) {
        result = Integer.parseInt(JOptionPane.showInputDialog(message2));
      }
      return result;
    }
    

    然后在创建对象时调用它:

    misEstudiantes2[i] = new Estudiante(JOptionPane.showInputDialog("Ingrese nombre").toUpperCase(),
                                        promptForInteger(0, 100, "Ingrese edad", "Ingrese edad, mas de 0 y menos de 100"),
                                        JOptionPane.showInputDialog("Ingrese carrera"),
                                        Integer.parseInt(JOptionPane.showInputDialog("Ingrese año")),
                                        Integer.parseInt(JOptionPane.showInputDialog("Ingrese mes")),
                                        Integer.parseInt(JOptionPane.showInputDialog("Ingrese dia")),
                                        Double.parseDouble(JOptionPane.showInputDialog("Ingrese sueldo")));
    

    我不知道你的母语,所以我使用了来自johnhopkinses 答案的字符串。

    【讨论】:

    • 为什么不把条件放在while:while(result &lt; min || result &gt; max)?但也要防止min&gt;max
    • 符合条件的公平点。我不同意min&gt;max 检查。它没有任何作用,因为作者是这个 api 的唯一用户,并且参数命名良好。
    • 目的是防止进入无限循环。注意,第二个Integer result = 必须是result =
    • 已更正。所以你有什么建议?可以交换值或抛出 IllegalArgumentException。
    • 我想我更喜欢IllegalArgumentException。但是您甚至可能会说根本不询问用户并默认为最低限度是合理的。我会说这并不重要,只要它是记录在案的行为,理想情况下包含在测试用例中。
    【解决方案3】:

    帮用户一个忙,并为他们提供一个微调器来选择数字。

    import javax.swing.*;
    
    class VerifiedIntegerInRange {
    
        public VerifiedIntegerInRange() {
            SpinnerNumberModel numberRange = new SpinnerNumberModel(-1,-1,100,1);
            JSpinner spinner = new JSpinner(numberRange);
            int i = numberRange.getNumber().intValue();
            while (i<0) {
                JOptionPane.showMessageDialog(
                    null,
                    spinner,
                    "Select a number between 0 & 100",
                    JOptionPane.QUESTION_MESSAGE);
                i = numberRange.getNumber().intValue();
            }
            System.out.println("User chose " + i);
        }
    
        public static void main(String[] args) {
            Runnable r = new Runnable() {
                public void run() {
                    new VerifiedIntegerInRange();
                }
            };
            SwingUtilities.invokeLater(r);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2019-06-19
      • 2021-04-26
      • 2017-03-20
      • 1970-01-01
      • 2011-02-12
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多