Python - Python para Engenharia - Geometria Analítica e Álgebra Linear |
Mais Dicas e Truques de Programação |
Java ::: Dicas & Truques ::: Strings e Caracteres |
Como transformar um StringBuffer em uma String usando o método toString() da classe StringBufferQuantidade de visualizações: 10630 vezes |
Como já vimos em dicas anteriores, um objeto da classe String é imutável, ou seja, quando modificamos o conteúdo de uma String, o interpretador cria um novo objeto, copiando o conteúdo da string anterior para o objeto recém-criado. Já a classe StringBuffer é mutável, ou seja, podemos modificar o seu conteúdo sem a necessidade da criação de um novo objeto. Você ficará surpreso ao saber que não podemos atribuir uma variável do tipo StringBuffer em uma variável do tipo String e vice-versa. Ao tentarmos fazer isso, os seguintes erros de compilação são exibidos: a) error: incompatible types: StringBuffer cannot be converted to String b) error: incompatible types: String cannot be converted to StringBuffer Assim, sempre que for necessário converter um StringBuffer em uma String, temos que usar o seu método toString(). Veja: package arquivodecodigos; // Este exemplo mostra como converter um // StringBuffer em uma String public class Estudos{ public static void main(String[] args){ StringBuffer frase = new StringBuffer("Programação Java"); String resultado = frase.toString(); System.out.println(resultado); System.exit(0); } } |
C# ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter um tipo string para um tipo decimal em C# usando o método Parse() da classe DecimalQuantidade de visualizações: 11071 vezes |
Este exemplo mostra como converter uma string em um valor do tipo decimal. Para isso nós vamos usar o método Parse() da classe Decimal da linguagem C#. No entanto, é preciso termos cuidado, pois este método pode lançar três tipos de exceções: ArgumentNullException, FormatException e OverflowException. Veja o trecho de código a seguir: using System; namespace Estudos { class Program { static void Main(string[] args) { string valor_string = "530,54"; // experimente com os valores "23,5", "arquivo" e // "659" // tenta efetuar a conversão de string para decimal try { decimal valor_decimal = decimal.Parse(valor_string); // exibe o resultado Console.WriteLine("Valor convertido com sucesso: " + valor_decimal); } catch (FormatException e) { // exibe a informações sobre a exceção // Input string was not in a correct format. Console.WriteLine(e.Message); } Console.WriteLine("\n\nPressione qualquer tecla para sair..."); // pausa o programa Console.ReadKey(); } } } Ao executar este código C# nós teremos o seguinte resultado: Valor convertido com sucesso: 530,54 Se tentarmos atribuir um valor string a um tipo decimal, sem efetuar a conversão, teremos o seguinte erro de compilação: Cannot implicitly convert type string to decimal |
C# :::
Coleções (Collections) ::: List |
Como usar a classe genérica List<T> do C# em suas aplicaçõesQuantidade de visualizações: 13632 vezes |
A classe genérica List<T> da linguagem C# representa uma lista fortemente tipada de objetos que podem ser acessados por índices. Esta classe fornece métodos para pesquisar, ordenar e manipular seus elementos. Veja sua posição na hierarquia de classes da plataforma .NET:System.Object System.Collections.Generic.List<T> System.ServiceModel.Install.Configuration. ServiceModelConfigurationSectionCollection System.ServiceModel.Install.Configuration. ServiceModelConfigurationSectionGroupCollection System.Workflow.ComponentModel.ActivityCollection System.Workflow.Activities.WorkflowRoleCollection System.Workflow.Activities.OperationParameterInfoCollection System.Workflow.ComponentModel.Design. ActivityDesignerGlyphCollection System.Workflow.Runtime.Tracking.ExtractCollection System.Workflow.Runtime.Tracking.TrackingAnnotationCollection System.Workflow.Runtime.Tracking.TrackingConditionCollection System.Workflow.Runtime.Tracking.ActivityTrackingLocationCollection System.Workflow.Runtime.Tracking.UserTrackingLocationCollection System.Workflow.Runtime.Tracking.ActivityTrackPointCollection System.Workflow.Runtime.Tracking.UserTrackPointCollection System.Workflow.Runtime.Tracking.WorkflowTrackPointCollection Esta classe implementa também as interfaces IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection e IEnumerable. A classe List<T> é a equivalente genérica da classe ArrayList. Ela implementa a interface genérica IList<T> usando um array (matriz) cujo tamanho é dinamicamente aumentado de acordo com a necessidade. Esta classe usa tanto um comparador de igualdade quanto um de ordenação. Os métodos tais como Contains(), IndexOf(), LastIndexOf() e Remove() usam um comparador de igualdade para os elementos da lista. O comparador de igualdade padrão para o tipo T é definido segundo as seguintes regras: Se o tipo T implementar a interface genérica IEquatable<T>, então o comparador de igualdade é o método Equals(T) dessa interface. Caso contrário, o comparador de igualdade padrão é Object.Equals(Object). Os métodos tais como BinarySearch() e Sort() usam um comparador de ordenação para os elementos da lista. O comparador padrão para o tipo T é definido da seguinte forma: Se o tipo T implementar a interface genérica IComparable<T>, então o comparador padrão é o método CompareTo(T) dessa interface. Caso contrário, se o tipo T implementar a interface não-genérica IComparable, então o comparador padrão é o método CompareTo(Object) dessa interface. Se o tipo T não implementar nenhuma destas duas interfaces, então não haverá comparador padrão, e um comparador ou delegate de comparação deve ser fornecido explicitamente. Uma lista List<T> não fornece garantias quanto à sua ordenação. Devemos ordená-la por conta própria antes de efetuar algumas operações (tais como BinarySearch) que exigem que a List<T> esteja ordenada. Os elementos em uma coleção do tipo List<T> podem ser acessados usando índices (que começam a partir de 0). Uma List<T> aceita o valor null como valor válido para tipos referência e aceita elementos duplicados. Em relação à performance, a documentação do .NET afirma que, embora List<T> e ArrayList possuam funcionalidade semelhante, a classe List<T> possui uma performance melhor na maioria dos casos, além de ser type safe (oferece segurança de tipos). Veja um trecho de código no qual criamos uma List<T> de inteiros, inserimos alguns valores e usamos o laço foreach para percorrer a lista e exibir os valores dos elementos: static void Main(string[] args){ // vamos criar um objeto da classe List<T> List<int> valores = new List<int>(); // vamos inserir três valores na lista valores.Add(5); valores.Add(2); valores.Add(9); // vamos usar o laço foreach para percorrer os elementos // na lista foreach(int v in valores){ Console.WriteLine(v); } // vamos pausar a execução Console.ReadKey(); } |
Java ::: Java + MySQL ::: Metadados da Base de Dados (Database Metadata) |
Java MySQL - Como obter uma lista das funções numéricas (matemática) suportadas pelo MySQL usando o método getNumericFunctions() da interface DatabaseMetaDataQuantidade de visualizações: 4746 vezes |
Em algumas situações gostaríamos de, via código, obter uma lista das funções numéricas, ou seja, funções matemáticas, suportadas pelo MS SQL Server. Para isso podemos usar o método getNumericFunctions() da interface DatabaseMetaData. É importante observar que, no Sun Microsystem's JDBC Driver for MySQL, a interface DatabaseMetaData é implementada por uma classe do mesmo nome, no pacote com.mysql.jdbc.DatabaseMetaData. E esta classe implementa o método getNumericFunctions() de forma a retornar a lista de funções numéricas separadas por vírgulas. Veja um trecho de código Java no qual listamos todas as funções numéricas suportados no MySQL 5.0: package estudosbancodados; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.SQLException; public class EstudosBancoDados{ public static void main(String[] args) { // strings de conexão String databaseURL = "jdbc:mysql://localhost/estudos"; String usuario = "root"; String senha = "osmar1234"; String driverName = "com.mysql.jdbc.Driver"; try { Class.forName(driverName).newInstance(); Connection conn = DriverManager.getConnection(databaseURL, usuario, senha); // vamos obter um objeto da classe com.mysql.jdbc.DatabaseMetaData DatabaseMetaData dbmd = conn.getMetaData(); // vamos obter a lista de funções numéricas disponíveis // nesta versão do MySQL String funcoesNumericas = dbmd.getNumericFunctions(); // como a lista de funções está separada por vírgulas, vamos obter // uma matriz de strings String funcoes[] = funcoesNumericas.split(","); // vamos mostrar o resultado for(int i = 0; i < funcoes.length; i++){ System.out.println(funcoes[i]); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } catch (Exception e) { System.out.println("Problemas ao tentar conectar com o banco de dados: " + e); } } } Ao executarmos este código teremos o seguite resultado: ABS ACOS ASIN ATAN ATAN2 BIT_COUNT CEILING COS COT DEGREES EXP FLOOR LOG LOG10 MAX MIN MOD PI POW POWER RADIANS RAND ROUND SIN SQRT TAN TRUNCATE |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Como usar o tipo de dados float do Java - Usando o tipo de dados float da linguagem JavaQuantidade de visualizações: 20536 vezes |
O tipo de dados float é usado quando precisamos armazenar números de ponto-flutuante (com parte fracionária) na faixa 1.401298464324817e-45f até 3.402823476638528860e+38f. Este tipo ocupa 32 bits na memória (o mesmo que um int) e possui precisão de 6 ou 7 dígitos significativos. Veja um exemplo de seu uso:public class Estudos{ public static void main(String args[]){ float valor = 54.5f; System.out.println("O valor da variável é: " + valor); System.exit(0); } } Antes de prosseguir, veja que inserí a letra "f" (ou "F") após o valor literal atribuído à variável. Se retirássemos esta letra, o compilador emitiria a seguinte mensagem de erro: Estudos.java:3: possible loss of precision found : double required: float float valor = 54.5; ^ 1 error Isso acontece porque, por padrão, um literal de ponto-flutuante é no mínimo do tipo double. E um double não cabe em um float. A definição da letra "f" ou "F" informa ao compilador que estamos realmente definindo um literal float. O tipo de dados float pode ser convertido (sem a necessidade de cast) para os seguintes tipos: float -> double Se precisarmos converter o tipo float para os tipos char, byte, short, int ou long, teremos que lançar mão de uma coerção (cast), também conhecida como conversão forçada. Veja: float valor = 54.5f; int valor2 = (int)(valor); É preciso ficar atento ao fato de que uma coerção de um tipo de ponto-flutuante para um tipo integral (inteiro) resulta na perda da parte fracionária do valor que está sofrendo o cast. |
Java ::: Lista de Exercícios Resolvidos (Algorítmos Resolvidos) ::: Data e Hora |
Exercícios Resolvidos de Java - Datas e horas - Escreva um programa Java que mostre a hora atual no formato HH:MM:SSQuantidade de visualizações: 1309 vezes |
Exercício Resolvido de Java - Datas e horas - Escreva um programa Java que mostre a hora atual no formato HH:MM:SS Pergunta/Tarefa: Escreva um programa Java console que mostre a hora atual no formato HH:MM:SS, ou seja, algo parecido com 23:43:15. Dica: Você pode usar várias classes Java para obter a hora atual. Não precisa se prender à classe que usei na resolução do exercício. Sua saída deverá ser parecida com: ![]() Resposta/Solução: package arquivodecodigos; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class Estudos{ public static void main(String[] args){ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss"); LocalDateTime agora = LocalDateTime.now(); System.out.println("A hora atual é: " + dtf.format(agora)); } } |
Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Como retornar o diretório atual em Delphi usando a função GetDir()Quantidade de visualizações: 11536 vezes |
Em algumas situações precisamos obter o diretório atual, ou seja, aquele a partir do qual nosso programa está sendo executado. Em Delphi isso pode ser feito com o auxílio da procedure GetDir(). Esta procedure requer um valor inteiro na faixa de 0 a 3 e uma string passada por referência. Em geral usamos o valor 0 no primeiro argumento para representar o drive padrão. Veja o exemplo:procedure TForm1.Button1Click(Sender: TObject); var diretorio_atual: string; begin // vamos obter o diretório atual e atribuí-lo // na variável diretorio_atual GetDir(0, diretorio_atual); // vamos exibir o resultado ShowMessage('O drive e diretório atual são: ' + diretorio_atual); end; Ao executar este código nós teremos o seguinte resultado: O drive e diretório atual são: C:\Users\Osmar\Documents\RAD Studio\Projects Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como escrever uma função C que verifica se duas strings são iguais ou diferentes (sem considerar maiúsculas e minúsculas)Quantidade de visualizações: 8533 vezes |
Esta dica mostra como escrever uma função em linguagem C que verifica se duas strings são iguais ou diferentes (sem considerar maiúsculas e minúsculas, ou seja, case insensitive). O nome da função é str_equal(). Esta função aceita duas strings como argumentos e retorna 1 se estas forem iguais e 0 em caso contrário. Experimente, faça as devidas alterações e adicione mais esta função ao seu repertório de códigos C:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> // função personalizada que permite verificar // se duas strings são iguais ou diferentes sem // considerar maiúsculas e minúsculas int str_equal(const char *str1, const char *str2){ while((toupper(*str1) == toupper(*str2)) && (*str1)){ str1++; str2++; } return((*str1 == 0) && (*str2 == 0)); } int main(int argc, char *argv[]){ char palavra1[] = "Java"; char palavra2[] = "Java"; if(str_equal(palavra1, palavra2) == 1) printf("As palavras sao iguais"); else printf("As palavras sao diferentes"); puts("\n\n"); system("PAUSE"); return 0; } |
Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como usar objetos da classe TColumn para representar as colunas individuais de um controle TDBGrid do DelphiQuantidade de visualizações: 8745 vezes |
Objetos da classe TColumn representam as colunas individuais em um data grid (TDBGrid). Cada controle DBGrid usa um objeto da classe TDBGridColumns para manter uma coleção de objetos TColumn, e, cada objeto TColumn representa as características visuais e ligação de dados de uma determinada coluna na grid. Um objeto TDBGridColumns é representado no controle TDBGrid pela propriedade Columns. Veja a posição da classe TColumn na hierarquia de classes do Delphi: System.TObject Classes.TPersistent Classes.TCollectionItem DBGrids.TColumn Veja um trecho de código no qual obtemos um objeto da classe TColumn representando a primeira coluna de um DBGrid e em seguida exibimos seu título: procedure TForm3.Button3Click(Sender: TObject); var coluna: TColumn; begin // vamos obter a primeira coluna do DBGrid coluna := DBGrid1.Columns[0]; // vamos mostrar o título da coluna obtida ShowMessage('O título da coluna é: ' + coluna.Title.Caption); end; Ao executar este código teremos uma mensagem parecida com: "O título da coluna é: Autor". Esta dica foi escrita e testada no Delphi 2009. |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Java para iniciantes - Como usar o tipo de dados byte da linguagem JavaQuantidade de visualizações: 10596 vezes |
O tipo de dados byte pode ser usado quando queremos armazenar valores inteiros na faixa ?128 à 127. Veja um exemplo:public class Estudos{ static byte valor = 102; public static void main(String args[]){ System.out.println("O valor da variável é: " + valor); System.exit(0); } } Porém, é preciso estar atento a um detalhe muito importante (testado na versão 6 do SDK). Veja o trecho de código seguinte: public class Estudos{ public static void main(String args[]){ byte a = 5; byte b = 6; byte soma = a + b; System.out.println("O resultado é: " + soma); System.exit(0); } } À primeira vista este código está correto, visto que a soma das variáveis a e b não ultrapassam a faixa do tipo byte. Porém, ao tentarmos compilar, temos a seguinte mensagem de erro: Estudos.java:5: possible loss of precision found : int required: byte byte soma = a + b; ^ 1 error Isso acontece porque o tipo de dados resultante da aplicação do operador de adição (e demais operadores binários) a dois números, é no mínimo int. Podemos, é claro, fazer uma coerção de dados (cast). Veja: byte a = 5; byte b = 6; byte soma = (byte)(a + b); O tipo de dados byte pode ser convertido (sem a necessidade de cast) para os seguintes tipos: byte -> short -> int -> long -> float -> double Um tipo byte não pode ser convertido implicitamente para o tipo char. Isso acontece porque o tipo char não possui sinal. |
Quem Somos |
![]() Osmar J. Silva
Programador Freelancer - Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Elétrica pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 15 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Programador Freelancer WhatsApp +55 (062) 98553-6711 Goiânia-GO Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
|
![]() José de Angelis
Programador Freelancer - Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Programador Freelancer WhatsApp +55 (062) 98243-1195 Goiânia-GO Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..
|
Linguagens Mais Populares |
1º lugar: Java |