Dada uma String que contem inteiros alguem sabe como é que eu faço para pegar carctere por caractere desta string e jogando os caracteres num array mas transformando cada cada caractere em double?
[code]
char[] vet = new char[2];
vet[0] = 1;
vet[1] = 2;
Double.parseDouble(new String(vet));[/code]
oi, vc pode tentar algo assim
public static void main(String[] args) {
String str = "123";
double[] d = new double[str.length()];
for (int i = 0; i < str.length(); i++) {
String s = Character.toString(str.charAt(i));
d[i] = Double.parseDouble(s);
}
for (int i = 0; i < d.length; i++) {
System.out.print(d[i]+" ");
}
}
talvez precise validar se o caractere é numero para isso
[quote=MnF]Double.parseDouble(String);
[/quote]
Isso não resolve meu problema pois pega toda a linha a transforma em um unico double! E o que eu preciso é que cada caractere desta string seje tratado isoladamente como um doible e que cada um desses double será jogado em posições diferentes do array! Estava implementando assim:
[code]class Gauss {
Scanner sistema;
public Gauss(Scanner sistema){
this.sistema = sistema;
}
public void leiaCoeficientes(){
String linha = sistema.nextLine();
int n = linha.length();
double [][]matriz = new double[n][n-1];
jogueValoresNaMtriz(matriz,linha);
}
int j = 0;
public void jogueValoresNaMtriz(double [][] matriz,String linha){
for(int k = 0; k<linha.length(); k++){
matriz[k][j] = Double.parseDouble(linha.valueOf(j));
}
for(int k = 0; k<linha.length(); k++){
System.out.print(" "+matriz[k][j]);
}
}
}[/code]
A primeira String linha comtem isto: “123456”
e eu quero que ele imprima assim: 1.0 2.0 3.0 4.0 5.0 6.0 sendo que estes numeros deixaram de ser string e passaram a ser double e cada um esta numa posição do array
Mas meu codigo esta imprimindo isto >>> 0.0 0.0 0.0 0.0 0.0 0.0
???
E o que tu me disse imprime isto >>>> 123456.0 123456.0 123456.0 123456.0 123456.0 123456.0
Sabes o que devo fazer?!!!
acabei lendo meio rápido e fiz do modo que pensei que era… mas utiliza o código do andré que acho que te ajuda.
Aqui, o seu estava quase certo,
import java.util.Scanner;
class Gauss {
private Scanner sistema;
public Gauss( Scanner sistema ) {
this.sistema = sistema;
}
public void leiaCoeficientes() {
String linha = sistema.nextLine();
int n = linha.length();
double [][]matriz = new double[n][n-1];
jogueValoresNaMtriz( matriz , linha );
}
public void jogueValoresNaMtriz( double [][] matriz , String linha ) {
final int j = 0;
for ( int k = 0; k < linha.length(); k++ ) {
matriz[k][j] = Double.valueOf( String.valueOf(linha.charAt(k)) );
}
for ( int k = 0; k < linha.length(); k++ ) {
System.out.print( matriz[k][j] + " " );
}
}
public static void main(String[] args) {
Gauss g = new Gauss( new Scanner(System.in) );
g.leiaCoeficientes();
}
}
Fiz como o andre disse mas ainda imprime 0.0 0.0 0.0 0.0 0.0 0.0
[code] int j = 0;
int k = 0;
public void jogueValoresNaMtriz(double [][] matriz,String linha){
//System.out.print(linha);
for(; k<n; k++){
for(;j<n1;j++){
String s = Character.toString(linha.charAt(j));
matriz[k][j] = Double.parseDouble(s);
}
}
j=0;
for(int k = 0; k<linha.length(); k++){
System.out.print(" "+matriz[k][j]);
}
}[/code]
Nossa, nao consigo achar o erro!
Olha o meu post acima…
Fazendo modificações FINALMENTE consegui fazer com que ele jogue na matriz os coeficientes. Mas o novo PROBLEMA agora é que ele esta jogando na matriz bidimensional duas vezes a primeira linha do arquivo txt. Pelo que entendi o metodo nextLine() retorna uma string da atual linha que o scanner se encontra e pula p proxima!
Veja o novo codigo:
class Gauss {
Scanner sistema;
int n;
int n1;
double [][]matriz;
public Gauss(Scanner sistema){
this.sistema = sistema;
}
public void leiaCoeficientes(){
int controle = 0;
String linha = sistema.nextLine();
System.out.println("------------------------ " +linha);
n = linha.length()-1;
n1 = n+1;
matriz = new double[n][n1];
while(controle<n) {
jogueValoresNaMtriz(matriz,linha);
controle++;
linha = sistema.nextLine();
System.out.println("------------------------ "+ linha);
}
int k = 0;
public void jogueValoresNaMtriz(double [][] matriz,String linha){
//System.out.println(linha);
//for(int k=0; k<n; k++){
System.out.println();
for(int j = 0;j<n1;j++){
String s = Character.toString(linha.charAt(j));
matriz[k][j] = Double.parseDouble(s);
System.out.println("val da matriz em kj "+matriz[k][j]);
}
k++;
}
} [/code]
Note que estou usando System.out.println("------------------------ "+ linha); para ver a linha que o scanner esta pegando e em jogueValoresNaMtriz usando System.out.println("val da matriz em kj "+matriz[k][j]); para conferir se os elementos estão sendo transformados em doubles e guardados um por um na matriz.
O arquivo txt contem estes dados:
123456
789221
432222
896400
907888
e o scanner esta pegando duas vezes a linha um e por isso acaba não pegando a ultima linha!
Aqui segue a classe principal caso você tente testar na sua máquina:
[code]import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
class Principal {
public static void main(String [] a ) throws FileNotFoundException {
File arquivo = new File("C:/Users/Jhonatan/Desktop/jhonatan/sistemas/sis.txt");
Scanner sistema = new Scanner(arquivo);
Gauss gaus = new Gauss(sistema);
gaus.leiaCoeficientes();