-3

質問: これを修正するにはどうすればよいですか? 値を入力するとコードは機能しますが、スキャナーを使用して値を読み取ると、都市の数を入力すると入力の読み取りが停止し、実行時例外がスローされます。

1つではなく2つのスキャナーを使用しようとしました.1つはdouble用、もう1つは整数用で、「doubleからintへの損失のある変換」が表示されるため、それがあなたのやり方ではないと確信しています。誰か助けてくれませんか?参考までに、私はUXアーキテクトであり、これは初めてです。したがって、どんな助けも大歓迎です。

import java.util.*;
import java.lang.Math;
public class Centralcity {


        public static void main(String[] args){


            int numcities;
            int x = 0;
            int y = 0;
            double shortest = 0;
            double distance1 = 0;
            double distance2 = 0;
            int closestX1=0, closestX2=0, closestY1 =0 , closestY2 = 0;

            Scanner scanner = new Scanner(System.in);
            System.out.println("Enter the number of cities: " );
            numcities = scanner.nextInt();


            double[] xcor=new double[numcities];
            double[] ycor=new double[numcities];
            double[][] distance= new double[numcities][numcities];
            double[] sumdistance= new double[numcities];
            double[] temp= new double[numcities];


                //numcities = 5;
                //double xcor[]=new double[] {2.5,5.1,1,5.4,5.5};

                //double ycor[]=new double[] {5,3,9,54,2.1};

          for(int i = 0; i<numcities; i++)
            {
                for(int j = 0; j<numcities; j++)
                {      
                System.out.println("Enter coordinates of the city:");
                xcor[i]=scanner.nextDouble();
                xcor[j]=scanner.nextDouble();
                ycor[i]=scanner.nextDouble();
                ycor[j]=scanner.nextDouble();
                }
                }

             for(int i = 0; i<numcities; i++)
            {
                for(int j = 0; j<numcities; j++)
                {                    

                distance[i][j]=Math.pow((Math.pow(xcor[i]-xcor[j], 2)) + (Math.pow(ycor[i]-ycor[j], 2)), 0.5);
                sumdistance[i]+=distance[i][j];
                }

            }

             temp=sumdistance;
              double temp1;

        for(int i = 0; i < temp.length; i++)
        {
            for(int j = 1; j < (temp.length -i); j++)
            {
                        if(temp[j-1] > temp[j])
                {
                    temp1 = temp[j-1];
                    temp[j-1]=temp[j];
                    temp[j]=temp1;
                }
            }
        }   

      double finl=0;
        for(int i = 0; i <numcities; i++)

             {
                 if(sumdistance[i]==temp[0])
                    {
                        finl=i;               

                    }               
            }
             System.out.println("The Central City coordinates are: " +xcor[finl]+","+ycor[finl]);

        }

    }
4

2 に答える 2

0

変数 finl を int 型に変更します。お気に入り:

 int finl=0;
    for(int i = 0; i <numcities; i++)

         {
             if(sumdistance[i]==temp[0])
                {
                    finl=i;               

                }               
        }
         System.out.println("The Central City coordinates are: "       +xcor[finl]+","+ycor[finl]);

それが動作します。

于 2013-11-13T21:29:56.920 に答える
0

受け取ったエラーは「double から int へのロッシー変換」であると言っていると思います。double 値を int 値に変換することはできません。入力データまたはデータの読み取り方法のいずれかを変更する必要があります。

double を int に変換できない理由に関する Q&A:型キャストせずに int/byte/short/long を float/double に変換できるのに、その逆は不可能な理由

于 2013-11-13T21:07:28.723 に答える