急!!程式編譯過但是結果跑不出來

這是我寫的程式,要輸入數字使他回文,並顯示出來

但是我執行的時候結果出不來,請大大幫忙看一下指出哪邊有誤ˊˋ

(編譯是通過的)

import java.util.Scanner;

public class Homework2

{

public static void main(String[] argv)

{

Scanner input=new Scanner(System.in);

if(!input.hasNextLong())//檢測字串是否能轉為long型態

System.out.println("Your input is not valid");

long times=input.nextLong(),i;

for(i=1;i<=times;i++)//輸入做幾個工作

{

long numeral;

numeral=input.nextLong();

for(long j=1;j<=1000;j++)//讓執行次數在1000次以下

{

if(reverse(numeral)!=numeral+reverse(numeral))//如果未回文則繼續

{

numeral+=numeral+reverse(numeral);

}

else if(numeral==196)//196是一個找不到回文的數

{

System.out.print("Your input has no reverse");

}

else

{

System.out.println(+j+" "+numeral);

}

}

}

}

public static long reverse(long remainder)//反轉數字用

{

long begin=0;

while(remainder>0)

{

begin=begin*10+remainder%10;

remainder=remainder/10;

}

return begin;

}

}

2 Answers

Rating
  • 胤煌
    Lv 5
    10 years ago
    Favorite Answer

    你的程式判斷迴文是錯的

    要判斷迴文用String跟StringBuffer會比較好

    而且StringBuffer本身就有提供反轉的方法了

    import java.util.Scanner;

    public class Homework2

    {

    public static void main(String[] argv)

    {

    Scanner read = new Scanner(System.in);

    int times = read.nextInt();//執行次數

    for(int i = 0;i < times;i++)

    {

    boolean ver = false;

    int t = 0;

    String num = read.next();

    if(!num.equals("196"))

    {

    while(!ver)//不是迴文繼續

    {

    StringBuffer tmp = new StringBuffer(num);

    String rev = (tmp.reverse()).toString();//利用StringBuffer的方法做反轉

    long numLong = Long.parseLong(num);

    long revLong = Long.parseLong(rev);

    long add = numLong + revLong;

    num = Long.toString(add);

    ver = verify(num);//驗證是否為迴文

    t++;

    }

    System.out.println(t+" "+num);

    }

    else

    System.out.println("Your input has no reverse");

    }

    }

    static boolean verify(String num)//驗證迴文

    {

    char[] tmp = num.toCharArray();

    int check1 = 0;

    int check2 = tmp.length - 1;

    boolean ver = false;

    while(!ver)

    {

    if(check2-check1 == 1 && tmp[check1] == tmp[check2])

    ver = true;

    if(check1 == check2)

    ver = true;

    if(tmp[check1] != tmp[check2])

    break;

    check1++;

    check2--;

    }

    return ver;

    }

    }

    2010-03-08 19:55:24 補充:

    這是我重新寫的

  • 10 years ago

    你是要輸入一個數字 然後反轉??

    那為何要跑1000遍?

    還有你的if condition 很奇怪 我不太了解你在測試啥ㄇ

    reverse(numeral)!=numeral+reverse(numeral))

    所以假如輸入23 的話 .. 這行就是 23 ! = 23+ 32

    基本上這行永遠會執行...除非你輸入0 ....

    所以基本上 你不管輸入啥ㄇ數字 他會進入第一個if condition 1000次 然後跳出 所以啥ㄇ東西都不會顯示

Still have questions? Get your answers by asking now.