2010-10-14 4 views
0

J'ai donc regardé quelques questions connexes, mais je n'arrive toujours pas à trouver ma réponse (je suppose que c'est spécifique). J'essaye d'employer la méthode de Scanner.useDelimiter dans Java et je ne peux pas l'obtenir pour fonctionner correctement ... voici mon dilemme ....useDelimiter pour analyser les virgules mais pas le signe négatif

Nous sommes censés écrire un programme qui prend un X, Y coordonne et calcule la distance entre les deux points. De toute évidence, une solution consiste à analyser chaque coordonnée x et y séparément, mais cela est bâclé pour moi. Mon plan est de demander à l'utilisateur d'entrer la coordonnée "x, y", puis de saisir les entiers en utilisant la méthode Scanner.nextInt(). Cependant, je dois trouver un moyen d'ignorer le "," et bien sûr, je peux le faire avec la méthode useDelimiter.

Selon d'autres threads, je dois comprendre regex (pas encore là) pour mettre dans la méthode useDelimiter et je l'ai pour ignorer les virgules, mais il est possible qu'un utilisateur entre un nombre négatif comme une coordonnée (qui est techniquement correcte). Comment est-ce que j'utilise useDelimiter pour ignorer la virgule, mais reconnaît quand même le signe négatif?

Ceci est ma première fois ici, voici mon code:

import java.util.Scanner; 
import java.text.DecimalFormat; 

public class PointDistanceXY 
{ 
public static void main(String[] args) 
{ 
    int xCoordinate1, yCoordinate1, xCoordinate2, yCoordinate2; 
    double distance; 

    // Creation of the scanner and decimal format objects 
    Scanner myScan = new Scanner(System.in); 
    DecimalFormat decimal = new DecimalFormat ("0.##"); 
    myScan.useDelimiter("\\s*,?\\s*"); 

    System.out.println("This application will find the distance between two points you specify."); 
    System.out.println(); 

    System.out.print("Enter your first coordinate (format is \"x, y\"): "); 
    xCoordinate1 = myScan.nextInt(); 
    yCoordinate1 = myScan.nextInt(); 

    System.out.print("Enter your second coordinate (format is \"x, y\"): "); 
    xCoordinate2 = myScan.nextInt(); 
    yCoordinate2 = myScan.nextInt(); 
    System.out.println(); 

    // Formula to calculate the distance between two points 
    distance = Math.sqrt(Math.pow((xCoordinate2 - xCoordinate1), 2) + Math.pow((yCoordinate2 - yCoordinate1), 2)); 

    // Output of data 
    System.out.println("The distance between the two points specified is: " + decimal.format(distance)); 
    System.out.println(); 
} 
} 

Merci pour votre aide et je suis impatient d'aider d'autres personnes sur toute la ligne!

Répondre

1

Je pense qu'il serait plus facile (et plus classique pour la ligne de commande type de programmes) pour simplement demander x et y séparément

Exemple:

Scanner myScan = new Scanner(System.in); 
System.out.print("Enter your first x coordinate: "); 
xCoordinate1 = Integer.parseInt(myScan.nextLine()); 
yCoordinate1 = Integer.parseInt(myScan.nextLine()); 

Toutefois, si vous insistez pour le faire à la fois en même temps et en utilisant un délimiteur, vous pourriez essayer d'utiliser la ligne de retour comme délimiteur au lieu du "," parce que vous devriez le délimiter deux fois, une fois après x et encore après y. Mais ce genre de vous ramène au même résultat. Le problème est que vous devez le délimiter deux fois si vous voulez utiliser un délimiteur et le prendre en même temps. Je suggère de jeter un oeil à la fonction .split d'une chaîne à la place.

Une autre approche serait d'utiliser le .split (","); function où "," est votre délimiteur. Exemple:

Scanner myScan = new Scanner(System.in); 
    System.out.print("Enter your first coordinate (format is \"x, y\"): "); 
    String input = myScan.nextLine(); 
    xCoordinate1 = Integer.parseInt(input.split(", ")[0]); 
    yCoordinate1 = Integer.parseInt(input.split(", ")[1]); 

Hope this helps, Enjoy.

+0

Merci beaucoup pour votre aide !! Nous n'avons pas discuté des méthodes parseInt et split, mais je l'ai réussi! Je vais regarder dans les méthodes un peu plus loin mais j'apprécie votre aide, cela fonctionne parfaitement. Honnêtement, il était trop facile de demander séparément à l'utilisateur x et y et j'ai appris de nouvelles choses en essayant d'être plus difficile. Depuis que je suis nouveau, je ne peux pas vraiment voter, mais je vous remercie d'avoir pris le temps de m'aider. – mmendoza27

Questions connexes