用于新手的java自描述性数字程序

用于新手的java自描述性数字程序,java,math,Java,Math,我正在尝试制作一个程序,搜索4位数字,并尝试识别两个自描述性数字(第一个数字等于整数中的零数,下一个数字等于整数中的1数,依此类推),我编写了一个do循环: import java.io.*; import java.util.*; import java.text.*; public class Numbers { int integers = 0; do { integer++; } while

我正在尝试制作一个程序,搜索4位数字,并尝试识别两个自描述性数字(第一个数字等于整数中的零数,下一个数字等于整数中的1数,依此类推),我编写了一个do循环:

import java.io.*;
import java.util.*;
import java.text.*;     

public class Numbers
{
int integers = 0;
      do
        {
            integer++;
        }
        while (integer <= 3210);
}
import java.io.*;
导入java.util.*;
导入java.text.*;
公共课号
{
整数=0;
做
{
整数++;
}
while(整数
while(整数1){
secondDigit=(integer.toString()).charAt(1);
如果((integer.toString().length())>2){
thirdDigit=(integer.toString()).charAt(2);
如果((integer.toString().length())>3){
第四位=(integer.toString()).charAt(3);
}
}
}
int numOfZeroes=0;
int numberOfOnes=0;
int numberOfTwos=0;
int numberOfThrees=0;
int i=0;
而(i<(integer.toString()).length()){
if((integer.toString()).charAt(i)='0'){
numOfZeroes++;
}else如果((integer.toString()).charAt(i)='1'){
numberofone++;
}else如果((integer.toString()).charAt(i)='2'){
numberOfTwos++;
}else如果((integer.toString()).charAt(i)='3'){
numberOfThrees++;
i++;
}
if(firstDigit==numofores+'0'&&secondDigit==numberOfOnes+'0'
&&第三位数==numberOfTwos+'0'和第四位数==numberOfTwos+'0'){
System.out.println(整数);
}
整数++;
}
}
这将按照您想要的方式工作,并且仅适用于这个特定的数字范围。但是,这没有输出,但是我仅使用您提到的前两个条件进行了测试,效果很好

我认为有更好的方法可以做到这一点。这有点多余。

while(整数1){
secondDigit=(integer.toString()).charAt(1);
如果((integer.toString().length())>2){
thirdDigit=(integer.toString()).charAt(2);
如果((integer.toString().length())>3){
第四位=(integer.toString()).charAt(3);
}
}
}
int numOfZeroes=0;
int numberOfOnes=0;
int numberOfTwos=0;
int numberOfThrees=0;
int i=0;
而(i<(integer.toString()).length()){
if((integer.toString()).charAt(i)='0'){
numOfZeroes++;
}else如果((integer.toString()).charAt(i)='1'){
numberofone++;
}else如果((integer.toString()).charAt(i)='2'){
numberOfTwos++;
}else如果((integer.toString()).charAt(i)='3'){
numberOfThrees++;
i++;
}
if(firstDigit==numofores+'0'&&secondDigit==numberOfOnes+'0'
&&第三位数==numberOfTwos+'0'和第四位数==numberOfTwos+'0'){
System.out.println(整数);
}
整数++;
}
}
这将按照您想要的方式工作,并且仅适用于这个特定的数字范围。但是,这没有输出,但是我仅使用您提到的前两个条件进行了测试,效果很好


我认为有更好的方法可以做到这一点。这有点多余。

我确信有更好的解决方案使用Java8流,但这里有一种更传统的方法

String s = Integer.toString(integer);
        boolean isDescriptive = true;
        int i = 0;
        while (i < s.length() && isDescriptive) {
            int temp = Integer.parseInt(s.charAt(i) + "");
            int count = 0;
            for (int j = 0; j < s.length(); j++) {
                if (i == Integer.parseInt(s.charAt(j) + "")) {
                    count++;
                }
            }
            if (count != temp) {
                isDescriptive = false;
            }
            i++;
        }
String s=Integer.toString(Integer);
布尔值isDescriptive=true;
int i=0;
而(i
我确信使用Java8流有更好的解决方案,但这里有一种更传统的方法

String s = Integer.toString(integer);
        boolean isDescriptive = true;
        int i = 0;
        while (i < s.length() && isDescriptive) {
            int temp = Integer.parseInt(s.charAt(i) + "");
            int count = 0;
            for (int j = 0; j < s.length(); j++) {
                if (i == Integer.parseInt(s.charAt(j) + "")) {
                    count++;
                }
            }
            if (count != temp) {
                isDescriptive = false;
            }
            i++;
        }
String s=Integer.toString(Integer);
布尔值isDescriptive=true;
int i=0;
而(i
您能描述一下您遇到的问题吗?您可以将
整数
转换为字符串,然后使用
String.charAt(0)
测试第一个数字
charAt(1)
来测试第二个数字,依此类推。@a数百万通常最好使用
%10
来获得单位数字和整数除法,以获得任何其他数字成为单位数字。@Teepeemm我想有一种数学方法可以做到这一点。我会记住的。你能描述一下你遇到的问题吗?你可以将
整数
转换为Strin然后用
String.charAt(0)
来测试第一个数字,
charAt(1)
来测试第二个数字,依此类推。@aarongion通常最好用
%10
来获得单位数字,用整数除法来获得任何其他数字,成为单位数字。@Teepeemm我想有一种数学方法可以做到这一点。我会记住的。