【问题标题】:How to return a new number by method如何通过方法返回一个新号码
【发布时间】:2013-11-22 18:07:23
【问题描述】:

我是java新手。
我必须编写一个程序,通过根据这些条件在现有目录号的左侧添加一个数字,将现有目录号(3-5 位)修改为新目录号:

  1. 新数字将是最左边数字与最右边数字之间的最大数字。
  2. 如果最左边的数字等于最右边的数字,则新数字将为 9。

输入应该是10个数字,然后添加一个新数字。 问题是,现在,“newKatalogNumber”方法获取旧目录号,并返回左侧数字,我喜欢返回新目录代码的方法。例如,如果方法得到 1234,她将返回 41234,并将在 main 的末尾打印。我还没有找到办法。 有人知道该怎么做吗? 我会很感激。

这是我的代码:

import java.util.Scanner;   // This program gets an old catalog number between 3 to 5 digits and change it to a new catalog number
// by adding a new digit to the left of the number

public class Number
{
    public static int newKatalogNumber(int num)  
    {
        while (num>=10) 
        {
            num /= 10;
        }
       return num;
    }

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in); 

        for (int oldNum=0; oldNum<10; oldNum++)   
        {
            System.out.print("Insert old catalog Number: ");//The user insert the old catalog number
            int catalogNum = input.nextInt();
            int mostRight = catalogNum % 10;   
            int mostLeft = newKatalogNumber(catalogNum);

            //Adding the new digit according to condition below: 

            if (mostRight>mostLeft)
            {
                System.out.println("Old catalog number is:"+catalogNum);
                System.out.println("New catalog number is"+mostRight+catalogNum);
            }
            else if (mostLeft>mostRight)
            {
                System.out.println("Old catalog number is:"+catalogNum);
                System.out.println("New catalog number is"+mostLeft+catalogNum);
            }
            else
            {
                System.out.println("Old catalog number is:"+catalogNum);
                System.out.println("New catalog number is"+9+catalogNum);
            }
        }
    }
}

【问题讨论】:

  • 如果您的号码是 3,并且您想在左侧添加 5,您可以通过添加 50 (50+3 = 53) 来实现。如果您的号码是 33,您可以添加 500 (500+33 = 533)。如果您的号码是 333,您可以添加 5000 (5000+333 = 5333)。试着找出如何概括它。
  • 当我说我不了解要求时,我想我代表了很多人。你能用 2 或 3 个手动数字转换来说明吗?

标签: java


【解决方案1】:

如果您有一个像1234 这样的数字,并且您想在开头添加一个5,那么您应该这样做:

1234 + 5 * 10000

如果你想在最后添加5,你应该这样做:

1234 * 10 + 5 

请注意,在第一种情况下,10000 中的零数等于原始数字中的位数。

【讨论】:

  • 这留下了如何获得位数的更难的问题。
  • 1) 1234 + 5 * 10000 ---> 12345
  • @dansalmo jeje,是的,要计算数字,可以重复除以 10 直到得到 0。除数是位数。或者你可以这样做:(int)(Math.log10(n)+1)。顺便说一句:注意0
  • 位数很简单:Integer.toString(12345).length()
【解决方案2】:

试试这个

        public static int NewKatatlogNumber (int num)
    {

        int noOfDigitsInTheNumber = num + "".length();
        int[] digitsArray = new int[noOfDigitsInTheNumber];

        int index = digitsArray.length - 1;

        //Extract digit by digit and populate the digitarray from right to left.
        //If your num is 123 your array will [1,2,3]
        while (num > 0)
        {
            int remainder = num % 10;

            num = num / 10;

            digitsArray[index--] = remainder;

        }

        //Find the number to add from the digit array.Apply your logic here
        int numberToAddToTheLeft = getNumberToAdd(digitsArray);


        int newNum = numberToAddToTheLeft;
        //Construct the final token by prepending the digit you identified
        for (int i = 0; i < digitsArray.length; i++)
        {
            int j = digitsArray[i];

            newNum = newNum * 10 + i;

        }

        return newNum;
    }

【讨论】:

    【解决方案3】:

    将数字转换为字符串,然后在其前面添加“n”。下面是一个使用 DrJava 的交互选项卡的示例:

    > Integer.parseInt("5" + Integer.toString(500))
    5500
    
    > Integer.parseInt(Integer.toString(5) + Integer.toString(500))
    5500
    

    但是还有一种更简洁(但less efficient)的方式,因为将"" 添加到 int 会将其转换为字符串:

    > Integer.parseInt(5 + "" + 500)
    5500
    

    如果你需要处理负数,你可以这样做:

    if (n>0)
        System.out.println(Integer.parseInt(p + "" + n));
    else
        System.out.println(Integer.parseInt("-" + p + "" + -n));
    

    【讨论】:

    • 谢谢,会试试你的建议。
    猜你喜欢
    • 2016-02-09
    • 2014-09-27
    • 2013-04-13
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多