当前位置: 首页 > 知识库问答 >
问题:

Java数字抽取器

端木桐
2023-03-14

我正在做的一项任务遇到了麻烦。提示如下:

创建一个DigitExtractor应用程序,提示用户输入一个整数(范围:0-999 ),然后显示数字的一位、十位或百位。用户将从菜单中选择他们希望显示的数字。

这个程序需要作为一个类来编写。菜单将是您与该类一起提交的驱动程序,以便您的讲师可以使用它来测试该类。

这是我的代码:

import java.io.*;
import java.util.*;
public class TestingMenu
{
    public int number;
    public int units;
    public int tens;
    public int hundreds;

    public TestingMenu(int input)
    {
        number = input;
        units = number%10;

        tens = number%10;

        hundreds = number%10;
    }

    public int return_units()
    {
        return units;
    } 

    public int return_tens()
    {
        return tens;
    }

    public int return_hundreds()
    {
        return hundreds;
    }

    public static void main(String[] args)
    {
        Scanner kbReader = new Scanner(System.in);
        TestingMenu num;
        int choice;

        int input;
        do
        {
            System.out.print("Enter a number(0-999): ");
            input = kbReader.nextInt();
            System.out.println("");
            System.out.println("Options");
            System.out.println("1) Units");
            System.out.println("2) Tens");
            System.out.println("3) Hundreds");
            System.out.println("4) Quit");
            num = new TestingMenu(input);
            System.out.print("Enter your choice: ");
            choice = kbReader.nextInt();

            switch(choice)
            {
                case 1: 
                System.out.println("The units digit is: " + num.return_units());
                break;

                case 2: 
                System.out.println("The tens digit is: " + num.return_tens());
                break;

                case 3: System.out.println("The hundreds digit is: " + num.return_hundreds());
                break;

                case 4: 
                System.exit(4);
                break;

                 default: 
                 System.out.print("Invalid. Select a number from the given options.");
                 choice = kbReader.nextInt();
             }
        }
        while(choice != 4);
    }
}

我想我已经基本掌握了,但每次测试都会遇到问题。当我输入一个数字,比如987,然后运行从1到3的所有选项时,一、十和百的结果都是7。4退出程序并正常工作,但我已经测试过很多次了。总的来说,它似乎只打印最后一位数字。

输入一个数字(0-999): 987

选项1)单位2)十个3)数百个4)退出输入您的选择:1单位数字是:7输入数字(0-999):987

选项1)单位2)十个3)数百个4)退出输入您的选择:2十位是:7输入一个数字(0-999):987

选项1)单元2)十位数3)百位数4)退出输入您的选择:3百位数是:7输入数字(0-999):987

选项1)单位2)十位数3)百位数4)退出并输入您的选择:4

有人可以帮我识别错误吗?我真的不知道这个程序出了什么问题,尽管它工作了几个小时。提前致谢。非常感谢所有帮助和反馈。

共有2个答案

姜飞飙
2023-03-14

我会做的是,我会使用你的扫描仪将输入作为字符串,这样你就可以使用. long()来获取长度,使用. charAt()来显示它们...记住charAt就像数组一样,索引从0开始,长度不是。如果你需要它们是int,你可以使用Integer.parseInt()(在尝试之前一定要检查它是一个数字,因为它会抛出一个异常,但是使用布尔值和try catch,你可以继续要求用户输入,直到他们像这样得到正确的输入

boolean notComplete = true;
while(notComplete = true){  
try{ userinput = //get input somehow
Integer.parseInt(userinput);
//do whatever
boolean complete = true;
}catch(NumberFormatException e){
//get input and repeat it will keep trying until the boolean is updated
}})

但为此,我认为只要您显示它,如何保留它并不重要。您还可以添加一个字符串数组,这些字符串具有与它们对应的索引...意思是这样的:

String[] s = {"ones", "tens", "hundreds"};

因此,当用户说1、2或3来选择应该显示的内容时,可以在字符串上减去一个call.charAt来显示数字,并在同一索引处打印数组s的索引,以告诉用户它是什么。

汲昊空
2023-03-14

你有一些问题,我建议你仔细检查一下-

// Why make them public?
private int units = 0;
private int tens = 0;
private int hundreds = 0;

public TestingMenu(int input) {
  // Convert it to a String.
  String str = String.valueOf(input);
  if (str.length() == 1) {
    // ones and only ones.
    units = Integer.parseInt(str);
  } else if (str.length() == 2) {
    // tens and ones.
    tens = Integer.parseInt(str.substring(0, 1));
    units = Integer.parseInt(str.substring(1, 2));
  } else if (str.length() == 3) {
    // hundreds, tens and ones.
    hundreds = Integer.parseInt(str.substring(0, 1));
    tens = Integer.parseInt(str.substring(1, 2));
    units = Integer.parseInt(str.substring(2, 3));
  }
}

// Just use get, PLEASE!
public int getUnits() {
  return units;
}

public int getTens() {
  return tens;
}

public int getHundreds() {
  return hundreds;
}

public static void main(String[] args) {
  Scanner kbReader = new Scanner(System.in);
  try {
    TestingMenu num;
    int choice;

    do {
      System.out.print("Enter a number(0-999): ");
      num = new TestingMenu(kbReader.nextInt());

      System.out.println("");
      System.out.println("Options");
      System.out.println("1) Units");
      System.out.println("2) Tens");
      System.out.println("3) Hundreds");
      System.out.println("4) Quit");
      System.out.print("Enter your choice: ");
      choice = kbReader.nextInt();

      if (choice == 1) {
        System.out.println("The units digit is: "
            + num.getUnits());
      } else if (choice == 2) {
        System.out.println("The tens digit is: "
            + num.getTens());
      } else if (choice == 3) {
        System.out.println("The hundreds digit is: "
            + num.getHundreds());
      } else if (choice != 4) {
        // We want 4 to fall through and terminate the loop.
        System.out.print("Invalid. Select a number "
            + "from the given options.");
        choice = kbReader.nextInt();
      }
    } while (choice != 4);
  } finally {
    // close the Scanner.
    kbReader.close();
  }
}
 类似资料:
  • 编写一个方法提取tOddDigits(),从正数n中提取奇数,并将奇数顺序组合成一个新数字。新数字返回给调用方法。如果输入数字n不包含任何奇数,则返回-1。例如,如果n=1234567,则返回1357;如果n=28,则返回-1。 测试用例: 预期产出: 这是我所做的方法,但输出是 最后的输出应该是错误输入! 如何检查n是否为负数,然后转到错误输入?

  • 本文向大家介绍java随机抽取指定范围不重复的数字,包括了java随机抽取指定范围不重复的数字的使用技巧和注意事项,需要的朋友参考一下 本文给大家介绍如何在JAVA中实现随机无重复数字的功能。如果您是初学者的话,有必要看一看这篇文章,因为这个功能一般会在面试中遇到。包括我本人在招聘人员的时候也喜欢拿这个问题去问别人,主要看一看考虑问题的模式和基础知识如何。 希望这篇文章能给初次接触的朋友一些帮助,

  • 问题内容: 我有一个抽象类,应该实现一个公共字段,该字段是一个接口或另一个抽象类。 像这样的东西: 现在我有另一个专门的类容器: Java的让我编译这个,和我想象的领域中被自动重载领域的......这些问题是:我是对这个?孩子的自动“超载”会发生吗? 而且,更重要的问题是,如果我还有另一个这样的课: 会返回1还是2?我的意思是容器字段将称为通用字段还是特殊字段?还有,如果特殊的prop1被声明为S

  • 本文向大家介绍java利用数组随机抽取幸运观众,包括了java利用数组随机抽取幸运观众的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java利用数组随机抽取幸运观众的具体代码,供大家参考,具体内容如下 思想: 首先将所有观众姓名生成数组,然后获取数组元素的总数量,再在数组元素中随机抽取元素的下标,根据元素的下标得到幸运观众的名字。 效果图: 以上就是本文的全部内容,希望对大家的学习

  • 1 介绍   词频-逆文档频率法(Term frequency-inverse document frequency,TF-IDF)是在文本挖掘中广泛使用的特征向量化方法。 它反映语料中词对文档的重要程度。假设用t表示词,d表示文档,D表示语料。词频TF(t,d)表示词t在文档d中出现的次数。文档频率DF(t,D)表示语料中出现词t的文档的个数。 如果我们仅仅用词频去衡量重要程度,这很容易过分强调

  • 问题内容: 在Java中,不同维度的数组具有不同的类型。因此,采用作为参数的方法不能采用或。我有很多代码,在这些代码中,我创建了非常相似的方法,但是要保证数组的维数。有没有一种方法可以处理任意维数的数组,从而抽象出这种通用功能? 问题答案: 如果您愿意放弃类型安全性,则可以稍作递归(这里没有惊喜,对吗?)和反思。 想法是按照递归的方式编写方法,直到数组只有一个维为止。进入单维度级别后,请执行工作;